跳转到主要内容

介绍

Apache Flink 是知名的流计算引擎,在事件驱动、流批分析等场景都均有广泛的应用。AutoMQ 是一款极速弹性的云原生 Kafka,通过对 Kafka 存储层做了云原生化的改造带来了 10 倍以上的成本降低和弹性优势。得益于 AutoMQ 对 Kafka 100% 兼容的特性,其可以非常轻松利用 Kafka 生态已有的工具读写 Flink。 本文将通过一个 WordCount 的例子来说明 Flink 如何从 AutoMQ 的 Topic 中读取数据进行数据分析然后再重新将结果写回到 AutoMQ 中。

环境准备

本文档采用的 Flink 版本为 v1.19.0。首先参考 Flink First Step 官方文档部署一个 v1.19.0 Flink 服务。

安装和启动 AutoMQ

参考 Linux 主机部署多节点集群▸ 文档部署一套 AutoMQ 集群。本例中使用的 AutoMQ 版本为 v1.0.4。

准备测试主题和数据

创建一个 topic to-flink 用于保存需要导入到 flink 进行分析计算的数据:
使用命令行工具往其中写入一批计算 word count 的数据:
写入的数据如下,输入完毕后可以按 Ctrl+C 退出生产者:
最后我们希望通过 Flink 计算后得到的结果应该是:
写入完毕后我们可以尝试消费下,确认写入成功:
创建一个 topic 用于接受 flink 计算后的结果
得益于 AutoMQ 对 Kafka 完全的兼容性,此处我们可以直接使用 Flink 提供的 Kafka Connector 来编写 source 和 sink 的代码,从 AutoMQ 的 Topic 中加载数据。

POM 依赖

以下 Java 代码分别用 KafkaSource 和 KafkaSink 定义了一个 AutoMQ source 和 sink。首先会从 to-flink 这个主题中读取我们提前准备好的“水果列表”测试数据。然后创建了一个 DataStream 来完成 WordCount 的计算工作并且将结果 sink 到 AutoMQ 的主题 from-flink 中。
以下代码通过 mvn build 以后会生成一个 automq-wordcount-flink-job.jar 也就是我们需要提交给 Flink 的 job 了。 执行如下命令提交任务 jar 给 flink,通过控制台我们可以看到 15 条数据已经被接受处理。

检验分析结果

使用 AutoMQ 解压后的 Kafka bin 工具从 from-flink 中消费数据,查看结果:
可以看到输出的结果如下。因为是按照流式处理,并且没有设置水位和窗口计算,所以整个 word count 每一次的计算结果都打印出来了。
我们接着再往 to-flink 主题写 5 条数据,观察流处理的结果:
写入的数据为
然后我们可以看到刚才消费 from-flink 的主题输入了以下正确的 word count 结果
在控制台上我们也可以看到有 20 条数据被正确接受和处理:

总结

本文演示了 AutoMQ 是如何集成 Flink 来完成一个 Word Count 的分析流程。关于 Kafka Connector 的更多配置和使用可以参考 Flink 官方文档 Apache Kafka Connector