Flink SQL

  1. 进入 JobManager 容器

    bash 复制代码
    docker exec -it 21442d9ca797 /bin/bash
  2. 启动 Flink 的 SQL 客户端

    bash 复制代码
    /opt/flink/bin/sql-client.sh embedded
  3. 尝试创建 Kafka 表

    在启动的 SQL 客户端中,尝试创建一个 Kafka 表,看看是否能够成功:

    sql 复制代码
    CREATE TABLE test_kafka_table (
        message STRING
    ) WITH (
        'connector' = 'kafka',
        'topic' = 'test_topic',
        'properties.bootstrap.servers' = '110.40.130.231:9092',
        'format' = 'json'
    );

    如果没有报错,说明 Kafka 连接器已成功加载。


以下是一个使用 Flink SQL 从 Kafka 读取数据、进行简单聚合计算、并将结果写入 MySQL 和 HDFS 的示例。这个示例假设你已经安装并配置好了 Flink、Kafka、MySQL 和 HDFS。

1. 从 Kafka 读取数据

首先,创建一个 Kafka 表来定义数据源。假设 Kafka 主题名为 user_behavior,包含用户行为数据,每条消息格式为 JSON,包含字段 user_id, item_id, category_id, behavior, ts (时间戳)。

sql 复制代码
CREATE TABLE user_behavior (
    user_id BIGINT,
    item_id BIGINT,
    category_id BIGINT,
    behavior STRING,
    ts TIMESTAMP(3),
    proctime AS PROCTIME(), -- 添加处理时间列
    WATERMARK FOR ts AS ts - INTERVAL '5' SECOND -- 设置水印,允许5秒延迟
) WITH (
    'connector' = 'kafka',
    'topic' = 'user_behavior',
    'properties.bootstrap.servers' = 'localhost:9092',
    'format' = 'json',
    'scan.startup.mode' = 'latest-offset'
);

2. 进行简单的聚合计算

接下来,对用户行为数据进行简单的聚合计算,例如按类别统计每分钟的行为次数。

sql 复制代码
CREATE VIEW behavior_count AS
SELECT
    category_id,
    TUMBLE_START(ts, INTERVAL '1' MINUTE) as window_start,
    COUNT(*) as behavior_count
FROM user_behavior
GROUP BY category_id, TUMBLE(ts, INTERVAL '1' MINUTE);

使用了 TUMBLE 函数来创建滚动窗口,按每分钟对数据进行分组,并计算每个类别的行为次数。

3. 将处理后的数据写入 MySQL

为了将上述聚合结果写入 MySQL,首先创建一个 MySQL 表。

sql 复制代码
CREATE TABLE behavior_summary (
    category_id BIGINT,
    window_start TIMESTAMP(3),
    behavior_count BIGINT,
    PRIMARY KEY (category_id, window_start) NOT ENFORCED
) WITH (
    'connector' = 'jdbc',
    'url' = 'jdbc:mysql://localhost:3306/mydatabase',
    'table-name' = 'behavior_summary',
    'username' = 'myuser',
    'password' = 'mypassword'
);

然后,可以INSERT INTO 语句将数据插入到 MySQL 表中。

sql 复制代码
INSERT INTO behavior_summary
SELECT * FROM behavior_count;

4. 将处理后的数据写入 HDFS

如果想将数据写入 HDFS,先创建一个 HDFS 表。

sql 复制代码
CREATE TABLE behavior_summary_hdfs (
    category_id BIGINT,
    window_start TIMESTAMP(3),
    behavior_count BIGINT
) WITH (
    'connector' = 'filesystem',
    'path' = 'hdfs://localhost:9000/user/flink/behavior_summary',
    'format' = 'csv'
);

接着,使用 INSERT INTO 语句将数据写入 HDFS。

sql 复制代码
INSERT INTO behavior_summary_hdfs
SELECT * FROM behavior_count;

总结

以上步骤展示了如何使用 Flink SQL 从 Kafka 读取数据、进行聚合计算,并将结果分别写入 MySQL 和 HDFS。这是一个基本的流程,根据实际需求,可以调整表结构、连接器配置以及 SQL 查询以适应不同的应用场景。

相关推荐
头茬韭菜15 小时前
第 4 篇:「Fluss + Flink 集成实战」—— Catalog、Source 与 Sink
大数据·python·flink·fluss
阿里云大数据AI技术2 天前
官宣|Apache Fluss 毕业成为顶级项目,湖流一体开启 Agentic Lake 全面实时化时代
人工智能·flink
Blossom i3 天前
分布式编程实验二:Flink安装与编程实践(头歌云客)
大数据·分布式·flink
渣渣盟3 天前
当反压问题解决后,如何进一步优化 Flink 作业的 Checkpoint 性能,让大状态作业也能稳定运行?
大数据·flink
渣渣盟4 天前
当 Redis 写入不再是瓶颈后,Flink 任务的反压可能来自哪里?如何系统性地定位和解决 Flink 反压问题?
数据库·redis·flink
渣渣盟4 天前
当 Redis 集群发生主从切换(Failover)时,Flink 任务会崩溃吗?如何利用 Sentinel 实现高可用?
redis·flink·sentinel
渣渣盟4 天前
当 Checkpoint 稳定运行后,如何进一步优化 Flink 作业的启动和恢复速度,让大状态作业的扩缩容从“小时级”降到“分钟级”?
大数据·flink
ZCBUS实时计算4 天前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
让头发掉下来6 天前
Flink SQL 中两个频繁变化 Topic 的 Join 行为分析
大数据·数据库·sql·flink
头茬韭菜6 天前
Apache Fluss 项目深度分析与技术文档系列计划
flink·spark·realtime·fluss