【Flink系列零】构建实时计算平台——FlinkSQL 作业菜鸟笔记
1.【Flink系列二十】Flink Example AsyncIOExample long running 应用程序的应用2.【Flink系列二十一】深入理解 JVM的类型加载约束,解决 Flink 类型加载冲突问题的通用方法3.【Flink系列十九】Flink 作业Hadoop 依赖冲突解决NoSuchMethodError4.HDFS_DELEGATION_TOKEN过期的问题解决汇总5.【Flink系列十八】History Server 重新登场,如何实现Yarn日志集成6.【Flink系列十七】Flink 最新yarn-application和yarn-per-job部署模式的Classpath传递分析7.【Flink系列十六】PrometheusPushGatewayReporter 限流压力过大解决8.【Flink系列十五】FLINK-24950 registerTemporaryFunction NullPointerException9.【Flink系列十四】Flink JVM参数不生效的问题分析和解决10.【Flink系列十三】Flink-Kafka-Connector KafkaSource FlinkKafkaConsumer没有上报指标11.【Flink系列十二】使用OpenResty 在InfluxDB协议层拦截Flink指标12.【Flink系列十一】FlinkSQL Gateway以及支持Kerberos多租户的实现思路13.【Flink系列十】Flink作业提交过程的调试和诊断14.【Flink系列九】Flink 作业提交遇到的问题记录以及原理15.【Flink系列八】构建实时计算平台——动态加载Catalog中的UDF
16.【Flink系列零】构建实时计算平台——FlinkSQL 作业菜鸟笔记
17.【Flink系列七】构建实时计算平台——校验FlinkSQL18.【Flink系列六】构建实时计算平台——Flink 1.10+通过Kerberos连接HiveCatalog19.【Flink系列五】构建实时计算平台——flink-connector-hive连接HiveMetastore遇到问题20.【Flink系列四】构建实时计算平台——Flink SQLClient启动失败的问题笔记21.【Flink系列三】构建实时计算平台——特别篇,Influxdb Java客户端访问指标数据22.【Flink系列二】构建实时计算平台——特别篇,用InfluxDb收集Flink Metrics23.【Flink系列一】构建实时计算平台——Flink开启和恢复Checkpoint前言
因为最近的需求是做FlinkSQL平台,需要在实时计算平台上集成FlinkSQL功能,但目前刚刚有了研究成果,所以有了这篇笔记。
第一步:编写一个流
这里使用python编写的一个流,比Java简洁。
需要注意的是 pip install kakfa-python,不能是 pip install kafka。
这里生产的集群是SCRAM加密的,所以配置会多一些。
有一个单词本,words.txt就是一些英文单词,一行一个。
这个Producer每5秒产生一个记录,以JSON形式发布到流。
from kafka import KafkaProducer
import json
import random
import time
import sys
if __name__ == '__main__':
producer = KafkaProducer(
bootstrap_servers="kafka1211.slannka.com:9194",
key_serializer=lambda v: str.encode if v is not None else None,
value_serializer=lambda v: v.encode('utf-8') if v is not None else None,
security_protocol="SASL_PLAINTEXT",
sasl_mechanism="SCRAM-SHA-256",
sasl_plain_username="slankkaCopyrightReserved",
sasl_plain_password="passwordOfUsername",
api_version=(2, 2, 1)
)
count = 0
thefile = open("data/words.txt", "rb")
while True:
buffer = thefile.read(1024 * 8192)
if not buffer:
break
count += buffer.count('\n'.encode())
thefile.close()
textfile = open("data/words.txt", "r")
lines = textfile.readlines() # 读取全部内容 ,并以列表方式返回
while True:
# initial values in each loop
offset = 0
word = None
# get a random value represents a word
randint = random.randint(0, count)
print("total: ", count, ", randInt: ", randint)
for line in lines:
if offset == randint:
word = line.strip()
break
offset += 1
val = {
"word": word,
"len": len(word)
}
value = json.dumps(val)
print("sending:", value)
producer.send("test_enc_putong", value)
print("send finished..(wait 5s.)")
time.sleep(5.0)
producer.close(3000)
textfile.close()
第二步:编写FLINKSQL
create table WordCountTab (
`word` STRING,
`len` INT,
# `ts` TIMESTAMP(3) METADATA FROM 'timestamp' #这一行不支持则可以去掉
) with (
'connector' = 'kafka',
'topic' = 'test_slankka',
'properties.bootstrap.servers' = 'xxxxx.xxxxx.xxxxxx.com:9194',
'properties.group.id' = 'test_flinksql_consumer',
'format' = 'json',
'scan.startup.mode' = 'earliest-offset',
'properties.sasl.jaas.config'= 'org.apache.kafka.common.security.scram.ScramLoginModule required username="slankkaCopyrightReserved" password="passwordOfUsername";',
'properties.sasl.mechanism' = 'SCRAM-SHA-256',
'properties.security.protocol' = 'SASL_PLAINTEXT'
);
create table WordCountSink (
word STRING,
len INT
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://mysql1211.slankkaCorps.com:3306/rtc',
'table-name' = 'flink_sink_test',
'username' = 'root',
'password' = 'root'
);
INSERT INTO WordCountSink
SELECT word, len FROM WordCountTab;
执行即可,生成一个Flink JOB,这个任务会不断得写<word,len>到Mysql中。
合集:
助力长期平稳运行大数据作业
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!