flinksql实践(从kafka读数据)

本案例是基于flinksql实现的,将逐步实现从kafka读写数据,聚合查询,关联维表(外部系统)等。

环境准备

首先确保电脑已经安装好zookeeper、kafka、flink。本文flink使用单机模式,zookeeper和kafka也使用单机配置。(环境配置部分可以跳过)

首先启动zookeeper

复制代码
# 启动zookeeper
bin/zkServer.sh start

# 关闭zookeeper
bin/zkServer.sh stop

然后启动kafka

复制代码
# 启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
# 关闭kafka 
bin/kafka-server-stop.sh -daemon config/server.properties

启动flink集群,并打开sql客户端

复制代码
# 启动flink集群
bin/start-cluster.sh
# 启动sql客户端
bin/sql-client.sh embedded -s yarn-session 
# 关闭flink集群
bin/stop-cluster.sh

案例1:从kafka读取csv格式数据

数据准备

csv格式数据是以','进行分隔。本案例设计一个学生信息表,包含学生id,学生姓名,学生年级字段。

复制代码
# 示范数据 
1,"zhangsan",2021
2,"lisi",2021
3,"wangwu",2024
4,"Bob",2021
5,"Lily",2022

kafka 主题相关命令

复制代码
# 遍历已有topic
bin/kafka-topics.sh --bootstrap-server 192.168.137.201:9092 --list
# 生产者
bin/kafka-console-producer.sh --bootstrap-server node1:9092 --topic test
# 消费者
bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning

创建kafka表

复制代码
create table kafkatable (
  `stu_id` bigint,
  `stu_name` string,
  `grade` bigint
) with (
  'connector' = 'kafka',
  'topic' = 'test',
  'properties.bootstrap.servers' = 'node1:9092',
  'properties.group.id' = 'testgroup',
  'scan.startup.mode' = 'latest-offset',
  'format' = 'csv'
)	

本案例读test分区的最新数据,如需修改,参考以下链接:

Kafka | Apache Flink

注意:kafka-flink连接器需要手动上传到flink安装目录下的lib目录下,官网有提供对应jar包。

案例实现

复制代码
-- 实时查看kafkatable数据
select * from kafkatable;

-- 查看不同年级学生数量
select grade,count(1) from kafkatable group by grade;

案例2:从kafka读取json格式数据

数据准备

复制代码
{"stu_id": 1, "stu_name": "zhangsan", "grade": 2021}
{"stu_id": 2, "stu_name": "lisi", "grade": 2021}
{"stu_id": 3, "stu_name": "wangwu", "grade": 2024}
{"stu_id": 4, "stu_name": "Bob", "grade": 2021}
{"stu_id": 5, "stu_name": "Lily", "grade": 2022}

创建kafka表

复制代码
create table student_info (
  `stu_id` bigint,
  `stu_name` string,
  `grade` bigint
) with (
  'connector' = 'kafka',
  'topic' = 'test',
  'properties.bootstrap.servers' = 'node1:9092',
  'properties.group.id' = 'testgroup',
  'scan.startup.mode' = 'latest-offset',
  'format' = 'json'
);	

案例实现

复制代码
-- 实时遍历
select * from student_info;
相关推荐
nvd1114 小时前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
笔墨登场说说1 天前
centos 8 使用 kafka_2.13-4.3.1.tgz 安装kafka
linux·kafka·centos
guo_wen_qiang1 天前
kafka一直restarting,报错InconsistentClusterIdException
分布式·kafka
今年下半年1 天前
【消息队列】Spring Boot 集成 Kafka 消息队列:确保消费完成(手动提交偏移量+幂等判断+失败重试机制)
spring boot·kafka·幂等·失败重试
此时不提桶,更待何时2 天前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
yumgpkpm3 天前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
用户1494484813203 天前
Raft 为什么取代了 Paxos?从 DLedger 和 KRaft 的技术选型聊起
kafka·raft
此时不提桶,更待何时3 天前
06-16-B-Kafka面试与生产事故实战
分布式·面试·kafka
阿里云云原生3 天前
Kafka 不止于消息:阿里云发布面向 AI 的流算湖一体化实时数据平台
kafka
龙腾-虎跃3 天前
Docker 一键启动服务合集:Redis、MySQL、Kafka、MinIO、Prometheus 等(网盘转存防失效)
redis·mysql·docker·kafka·prometheus·小龙虾·miniio