使用Flink动态创建和更改Kafka主题

时间:2018-08-17 21:55:15

标签: apache-kafka apache-flink

我正在使用Flink从不同的Kafka主题读取和写入数据。 具体来说,我正在使用FlinkKafkaConsumer和FlinkKafkaProducer。

我想知道是否可以根据程序中的逻辑或记录本身的内容,将正在读取和写入的Kafka主题更改为“即时”。

例如,如果读取了具有新字段的记录,则我想创建一个新主题,并开始将具有该字段的记录转移到新主题上。

谢谢。

2 个答案:

答案 0 :(得分:0)

进一步考虑要求

第一步是-为了简单起见,您将从一个主题开始,并在运行时根据提供的数据生成更多主题,并将相应的消息定向到这些主题。这是完全可能的,并且不会是复杂的代码。使用ZkClient API检查主题名称是否存在,如果不存在,请使用新名称创建模型主题,然后开始通过与该新主题绑定的新生产者将消息推送到该主题中。您无需重新启动作业即可生成针对特定主题的消息。

您的最初消费者成为生产者(针对新主题)+消费者(旧主题)

第二步是-您要使用新主题的消息。一种方法可能是完全产生新工作。为此,您可以先创建一个线程池并为其提供参数。

再次对此要格外小心,如果出现循环错误,更多的自动化操作可能导致集群过载。考虑一下一段时间后如果输入数据不受控制或只是脏乱而创建了太多主题的可能性。如上所述,可能会有更好的架构方法。

答案 1 :(得分:0)

如果您的主题遵循通用命名模式,例如“ topic-n *”,则Flink Kafka使用者可以自动读取“ topic-n1”,“ topic-n2”,...等。将它们添加到Kafka中。

Flink 1.5(FlinkKafkaConsumer09)添加了对基于正则表达式的动态分区发现和主题发现的支持。这意味着Flink-Kafka使用者可以选择新的Kafka分区,而无需重新启动作业,并且只需维护一次保证。

接受 subscriptionPattern 的消费者构造函数:link