繁体   English   中英

Apache Flink 上的自定义 Kafka 源

[英]Custom Kafka Source on Apache Flink

我有一个项目,我需要订阅与数据库中注册的任务相关的特定主题。 每个任务都与一个主题相关,并且可以执行从任务元数据描述的特定转换。 这些任务可以被另一个系统注册、更新或禁用,并且 flink 作业必须反映这些更改,而无需重新启动作业。

Based on that I tried something similar to https://flink.apache.org/news/2020/03/24/demo-fraud-detection-2.html where I have two source functions, one fetching the database for tasks in a间隔方式和其他订阅主题使用模式和自定义反序列化器(获取主题名称)。

然后一个 CoProcessFunction 负责连接来自 Task Source 和 Kafka Source 的数据,保留与每个主题相关的任务列表(每次 Task Source 从数据库中获取数据时都会刷新列表)。 之后,应用转换并转换保存在特定系统上的数据。

在此处输入图像描述

我对这个设计的问题是我只能有一个消费者组 id,所以如果我没有与某个名为“foo”的主题相关的任务,来自“foo”的数据将不断出现,并且偏移量将被更新。 如果将来我注册一个任务来使用“foo”做某事,该任务将不会处理来自该主题的历史数据。

我可以实现一个自定义 kafka 来扩展 FlinkKafkaConsumer 以从数据库中获取这些任务,然后开始使用与任务本身提供的消费者组 ID 相关的主题吗?

任务需要每 N 分钟刷新一次,以获取外部系统提供的任务列表的更改。

我也愿意接受其他想法的建议。

对我来说,听起来你所有的工作都是完全独立的。 您希望每个作业自己使用其数据(使用 kafka 消费者组),以便同一 kafka 主题上的三个作业也接收数据 3 次。 您可能还希望,如果某些工作很慢,则其他工作不会在处理过程中被阻止。

因此,我的建议是:启动单个 flink session,但将您的工作独立部署在其中。 您需要构建一种部署组件/脚本,用于从任务源接收任务并启动或停止作业。

每个作业都可以配置为具有专用的 kafka 消费者组 ID,并且可以配置为在检查点提交到该组。 在下一次重新启动时,您可以从 state(作业最后停止的位置,例如从保存点)开始,或者您不提供检查点/保存点并告诉它从提交的组 ID 偏移量开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM