Apache kafka Apache Flink上的自定义Kafka源代码

Apache kafka Apache Flink上的自定义Kafka源代码,apache-kafka,etl,apache-flink,Apache Kafka,Etl,Apache Flink,我有一个项目,我需要订阅与数据库中注册的任务相关的特定主题。每个任务都与一个主题相关,并且可以执行任务元数据中描述的特定转换。任务可以由其他系统注册、更新或禁用,flink作业必须反映这些更改,而无需重新启动作业 基于此,我尝试了一些类似于我有两个源函数的东西,一个以间隔方式获取任务的数据库,另一个使用模式和自定义反序列化器订阅主题(以获取主题名称) 然后,协处理函数负责连接来自任务源和Kafka源的数据,并保存与每个主题相关的任务列表(每次任务源从数据库获取数据时,该列表都会刷新)。然后应用转

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

基于此,我尝试了一些类似于我有两个源函数的东西,一个以间隔方式获取任务的数据库,另一个使用模式和自定义反序列化器订阅主题(以获取主题名称)

然后,协处理函数负责连接来自任务源和Kafka源的数据,并保存与每个主题相关的任务列表(每次任务源从数据库获取数据时,该列表都会刷新)。然后应用转换并将转换后的数据保存在特定系统上

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

我是否可以实现一个自定义kafka,它扩展FlinkKafkaConsumer以从数据库中获取这些任务,然后启动一个使用任务与任务本身提供的消费者组id相关的主题的自定义kafka

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


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

对我来说,听起来你所有的工作都是完全独立的。您希望每个作业本身使用其数据(使用卡夫卡使用者组),以便同一卡夫卡主题上的三个作业也会收到三次数据。您可能还希望,如果某些作业速度较慢,则其他作业不会在处理过程中受阻

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


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

我觉得您最好管理自己的源代码,其中包含KafkaConsumer,通过这种方式,您可以控制用户组ID和正在读取的主题偏移量。