Flink实现实时数据处理

代码如下:

python 复制代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from pyflink.datastream import StreamExecutionEnvironment
from pyflink.table import StreamTableEnvironment, EnvironmentSettings, DataTypes

# 初始化执行环境
s_env = StreamExecutionEnvironment.get_execution_environment()
s_env.set_parallelism(4)
# 必须开启 checkpoint,时间间隔为毫秒,否则不能输出数据
s_env.enable_checkpointing(600000)  # 600000 十分钟

env_settings = EnvironmentSettings.new_instance().in_streaming_mode().build()
t_env = StreamTableEnvironment.create(s_env, environment_settings=env_settings)

# 显式注册 Kafka 连接器
t_env.get_config().get_configuration().set_string("pipeline.jars", "file:///opt/flink/lib/flink-connector-kafka-1.16.0.jar")

# 创建 source 表
t_env.execute_sql("""
CREATE TABLE source_blog_kafka (
    ip_address STRING,
    post_id INT,
    event_type STRING,
    proctime AS PROCTIME()  -- 添加处理时间列
) WITH (
    'connector' = 'kafka',
    'topic' = 'blog_views',
    'properties.bootstrap.servers' = '110.40.130.231:9092',
    'properties.group.id' = 'flink_kafka_hive_blog_consumers',
    'scan.startup.mode' = 'earliest-offset',
    'format' = 'json'
)
""")

# 创建 sink 表
t_env.execute_sql("""
CREATE TABLE sink_blog_hive (
    post_id INT,
    view_count INT
) WITH (
    'connector' = 'kafka',
    'topic' = 'blog_view_stats',
    'properties.bootstrap.servers' = '110.40.130.231:9092',
    'format' = 'json'
)
""")

# 定义 SQL 查询
t_env.execute_sql("""
INSERT INTO sink_blog_hive
SELECT post_id, CAST(COUNT(*) AS INT) AS view_count
FROM source_blog_kafka
GROUP BY post_id, TUMBLE(proctime, INTERVAL '1' MINUTE)
""")

# 启动执行环境
t_env.execute("Blog View Stats")

print("Data processing job started.")

展示了一个使用 Apache Flink 进行实时数据处理的例子,该例子从 Kafka 消费数据,对博客文章的浏览量进行统计,并将结果写回到另一个 Kafka 主题。以下是对你提供的代码的一些解释和建议:

解释

  1. 初始化执行环境

    • StreamExecutionEnvironmentStreamTableEnvironment 被用来创建流处理环境。set_parallelism(4) 设置了并行度为4,意味着任务可以在四个线程上并行执行。
    • enable_checkpointing(600000) 开启了检查点机制,确保在发生故障时能够恢复状态。这里设置的检查点间隔是十分钟。
  2. 配置 Kafka 连接器

    • 通过 pipeline.jars 参数指定了 Kafka 连接器的 JAR 文件路径,这是为了让 Flink 能够与 Kafka 集群通信。
  3. 定义 Source 和 Sink 表

    • source_blog_kafka 表用于从 Kafka 的 blog_views 主题读取数据,数据格式为 JSON。
    • sink_blog_hive 表用于将处理后的数据写入 Kafka 的 blog_view_stats 主题,同样以 JSON 格式存储。
  4. SQL 查询

    • 使用 SQL 对 source_blog_kafka 表中的数据按 post_id 分组,并计算每分钟内的点击次数,然后将结果插入到 sink_blog_hive 表中。
  5. 启动任务

    • 最后调用 t_env.execute("Blog View Stats") 启动任务执行。

建议

  • 检查点配置:确保 Kafka 连接器版本支持 Flink 的检查点功能,这对于实现精确一次(exactly-once)语义非常重要。
  • 资源管理:确保 Flink 集群有足够的资源来运行这个任务,特别是当并行度设置较高时。
  • 错误处理:考虑添加适当的错误处理逻辑,比如设置重启策略,以便在遇到失败时能够自动恢复。
  • 监控和调试:部署后,利用 Flink 提供的监控工具来跟踪作业的状态和性能,及时发现并解决问题。
相关推荐
Hello.Reader7 小时前
Flink 状态后端(State Backends)实战原理、选型、配置与调优
大数据·flink
还是大剑师兰特13 小时前
Flink面试题及详细答案100道(61-80)- 时间与窗口
flink·大剑师·flink面试题
武子康18 小时前
大数据-121 - Flink 时间语义详解:EventTime、ProcessingTime、IngestionTime 与 Watermark机制全解析
大数据·后端·flink
戚砚笙20 小时前
Flink进阶:从“会用”到“用明白”的踩坑与实战总结
flink
武子康2 天前
大数据-120 - Flink滑动窗口(Sliding Window)详解:原理、应用场景与实现示例 基于时间驱动&基于事件驱动
大数据·后端·flink
Hello.Reader2 天前
Flink 广播状态(Broadcast State)实战从原理到落地
java·大数据·flink
Hello.Reader2 天前
Flink State V2 实战从同步到异步的跃迁
网络·windows·flink
Hello.Reader2 天前
Apache StreamPark 快速上手从一键安装到跑起第一个 Flink SQL 任务
sql·flink·apache
RunningShare2 天前
从“国庆景区人山人海”看大数据处理中的“数据倾斜”难题
大数据·flink
Hello.Reader2 天前
Flink 执行模式在 STREAMING 与 BATCH 之间做出正确选择
大数据·flink·batch