pyfink1.20版本下实现消费kafka中数据并实时计算

1、环境

复制代码
JDK版本:1.8.0_412

python版本:3.10.6

apache-flink版本:1.20.0

flink版本:1.20

kafka版本:kafka_2.12-3.1.1

flink-sql-connector-kafka版本:3.3.0-1.20

2、执行python-flink脚本

从kafka的demo获取消息,并将其中的a字段存入kafka的test_kafka_topic内,并打印sum(b)的值

复制代码
from pyflink.table import TableEnvironment, EnvironmentSettings

def log_processing():
    # 创建流处理环境
    env_settings = EnvironmentSettings.in_streaming_mode()
    t_env = TableEnvironment.create(env_settings)
    
    # 设置 Kafka 连接器 JAR 文件的路径
    # 确保 JAR 文件确实存在于指定路径,并且与 Flink 版本兼容
    t_env.get_config().get_configuration().set_string(
        "pipeline.jars", 
        "file:///home/data/flink/flink-1.20.0/lib/flink-sql-connector-kafka-3.3.0-1.20.jar"
    )

    # 定义源表 DDL
    source_ddl = """
    CREATE TABLE source_table(
        a VARCHAR,
        b INT  -- 如果 b 字段不重要,可以考虑从源表中移除它
    ) WITH (
        'connector' = 'kafka',
        'topic' = 'demo',
        'properties.bootstrap.servers' = '192.168.15.130:9092',
        'properties.group.id' = 'test_3',
        'scan.startup.mode' = 'latest-offset',
        'format' = 'json'
    )
    """

    # 定义目标表 DDL
    sink_ddl = """
    CREATE TABLE sink_table(
        a VARCHAR
    ) WITH (
        'connector' = 'kafka',
        'topic' = 'test_kafka_topic',
        'properties.bootstrap.servers' = '192.168.15.130:9092',
        'format' = 'json'
    )
    """

    # 执行 DDL 语句创建表
    t_env.execute_sql(source_ddl)
    #table = t_env.from_path("sql_source")
    #table.execute().print()
    table_result  = t_env.execute_sql("select sum(b) sb from source_table")
    table_result.print()
    t_env.execute_sql(sink_ddl)

    # 执行 SQL 查询并将结果插入到目标表
    # 注意:wait() 方法会阻塞,直到插入操作完成(在流处理中通常是无限的)
    t_env.sql_query("SELECT a FROM source_table") \
        .execute_insert("sink_table").wait()  # 考虑是否真的需要 wait()

if __name__ == '__main__':
    log_processing()

python3 KafkaSource.py

3、启动kafka生产者

复制代码
/usr/local/kafka_2.12-3.1.1/bin/kafka-console-producer.sh --broker-list 192.168.15.130:9092 --topic demo

输入模拟数据进行测试
>{"a": "example_string_1672531199", "b": 42}
>{"a": "example_string_1672531199", "b": 42}
>{"a": "example_string_1672531199", "b": 4}
>{"a": "example_string_1672531199", "b": 4}
>{"a": "example_string_1672531199", "b": 4}

可以看到sum(b)值已输出

4、启动kafka消费者

查看往test_kafka_topic插入的a字段数据已被消费

复制代码
/usr/local/kafka_2.12-3.1.1/bin/kafka-console-consumer.sh --bootstrap-server 192.168.15.130:9092  --from-beginning --topic test_kafka_topic
相关推荐
Chasing__Dreams25 分钟前
Mysql--基础知识点--105--分布式事务
数据库·分布式·mysql
indexsunny38 分钟前
互联网大厂Java面试实战:Spring Boot微服务与Kafka消息队列深度解析
java·spring boot·微服务·面试·kafka·消息队列·电商
csgo打的菜又爱玩41 分钟前
7.DispatcherResourceManagerComponentFactory解析.md
开发语言·python·flink
java干货1 小时前
Redis 分布式限流的四大算法与终极形态
数据库·redis·分布式
富士康质检员张全蛋1 小时前
Kafka架构 主题中的分区
分布式·kafka
富士康质检员张全蛋1 小时前
kafka 环境部署
分布式·kafka
富士康质检员张全蛋2 小时前
Kafka架构 Kafka核心概念
kafka
PGFA2 小时前
【深度实战】详解 ORA-01591:因网络波动引发的分布式事务死锁及全流程修复
网络·分布式
FL4m3Y4n2 小时前
分布式消息推送系统协议设计【C++ grpc kafka】
c++·分布式·kafka
ward RINL2 小时前
分布式推理框架 xDit
分布式