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 提供的监控工具来跟踪作业的状态和性能,及时发现并解决问题。
相关推荐
华农DrLai5 小时前
Spark SQL Catalyst 优化器详解
大数据·hive·sql·flink·spark
岁岁种桃花儿5 小时前
Flink从入门到上天系列第一篇:搭建第一个Flink程序
大数据·linux·flink·数据同步
Hello.Reader14 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
Hello.Reader17 小时前
Flink 使用 Amazon S3 读写、Checkpoint、插件选择与性能优化
大数据·flink
Hello.Reader18 小时前
Flink 对接 Google Cloud Storage(GCS)读写、Checkpoint、插件安装与生产配置指南
大数据·flink
Hello.Reader18 小时前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
wending-Y20 小时前
记录一次排查Flink一直重启的问题
大数据·flink
Hello.Reader20 小时前
Flink 对接 Azure Blob Storage / ADLS Gen2:wasb:// 与 abfs://(读写、Checkpoint、插件与认证)
flink·flask·azure
Hello.Reader21 小时前
Flink 文件系统通用配置默认文件系统与连接数限制实战
vue.js·flink·npm
Hello.Reader1 天前
Flink Plugins 机制隔离 ClassLoader、目录结构、FileSystem/Metric Reporter 实战与避坑
大数据·flink