【发布时间】:2022-01-11 03:11:34
【问题描述】:
我有一个基于 Flink Data Stream 的工作 Flink 作业。我想REWRITE基于 Flink 有状态函数 3.1 的整个作业。
我目前的 Flink Job 的功能是:
- 从 Kafka 读取消息
- 每条消息的格式都是一个数据包的切片,例如(s for slice):
- s-0, s-1 用于数据包 0
- s-4、s-5、s-6 用于数据包 1
- 该作业将切片合并为多个数据包,然后将数据包接收到 HBase
- 窗口函数用于处理切片到达的无序
我的目标
- 目前我已经在我的 k8s 上运行了 Flink Stateful Functions 演示。我想在有状态函数上重写我的整个工作。
- 将数据保存到 MinIO 而不是 HBase
我目前的计划
我已经阅读了文档并得到了一些想法。我的计划是:
- 不用再和 Kafka 打交道了,
Kafka Ingress(https://nightlies.apache.org/flink/flink-statefun-docs-release-3.0/docs/io-module/apache-kafka/) 搞定了 - 基于 java SDK 重写我的工作。合并很简单。但是窗口函数呢?
- 也许我应该使用带有 TTL 的持久状态来模拟窗口函数行为
-
MinIO的出口不在默认Flink I/O Connectors的列表中,因此我需要自己为MinIO编写自定义Flink I/O Connector,根据https://nightlies.apache.org/flink/flink-statefun-docs-release-3.0/docs/io-module/flink-connectors/ - 我想避免使用
Embedded module,因为它会阻止缩放。自动缩放是我要迁移到Flink stateful functions的关键原因
我的问题
我对自己的计划没有信心。我的理解/计划有什么问题吗?
有什么我应该参考的最佳实践吗?
更新:
窗口被用来组装结果
- 获取一个切片,检查它的元数据并知道它是数据包的最后一个
- 也知道数据包应该包含 10 个切片
- 如果已经有 10 个切片,则合并它们
- 如果还没有足够的切片,请等待一段时间(例如 10 分钟),然后合并或记录数据包错误。
我想在重写过程中摆脱 windows,但我不知道如何
【问题讨论】:
-
你真的需要windows吗?即,您是使用 windows 来计算窗口分析,还是在等待组装完整结果时缓冲数据?
-
等待组合完整的结果。组装逻辑可以描述为:
标签: apache-flink flink-streaming flink-statefun