Apache kafka 同一卡夫卡主题的多个Flink管道 背景

Apache kafka 同一卡夫卡主题的多个Flink管道 背景,apache-kafka,apache-flink,Apache Kafka,Apache Flink,我们有一个卡夫卡主题,有稳定的数据流。为了处理它,我们有一个无状态的Flink管道,它使用该主题并写入另一个主题 有时,我们会收到Flink无法处理的突发信息。我们不希望将Flink管道和集群配置为始终支持最大负载,我们希望根据负载动态扩展。(预算原因$$) 我们想到的解决方案 一种方法是向Flink集群添加/删除节点,并更改Flink管道操作符的并行性。这将需要使用快照停止Flink作业,重新配置并行性并使用新的并行性重新启动 这将是伟大的,但我们不能允许自己的停机时间产生。我们必须在不停机的

我们有一个卡夫卡主题,有稳定的数据流。为了处理它,我们有一个无状态的Flink管道,它使用该主题并写入另一个主题

有时,我们会收到Flink无法处理的突发信息。我们不希望将Flink管道和集群配置为始终支持最大负载,我们希望根据负载动态扩展。(预算原因$$)

我们想到的解决方案 一种方法是向Flink集群添加/删除节点,并更改Flink管道操作符的并行性。这将需要使用快照停止Flink作业,重新配置并行性并使用新的并行性重新启动

这将是伟大的,但我们不能允许自己的停机时间产生。我们必须在不停机的情况下扩大/缩小规模

如果我们使用常规的Kafka使用者,那么只需添加一个使用者(假设我们有足够的Kafka分区),Kafka就会在所有使用者之间重新分配主题分区

Flink Kafka使用者自己管理分区分配和偏移量,这只允许一次语义(我们不需要它)。缺点是单个Flink作业总是使用所有主题分区

我们认为我们可以创建另一个Flink实例,该实例将使用同一组订阅同一主题,并让Kafka在它们之间分发分区。但为此,我们需要Kafka Flink使用者让Kafka管理分配给哪个使用者的分区

我们在找什么 在现有使用者中找不到包含此类使用者或配置的库。我们可以自己编写(不那么困难),但如果有现有的解决方案,我们宁愿使用它

我们错过什么了吗?我们有什么误解吗?有更好的解决办法吗


谢谢

最直接的方法是修改拓扑结构,使其能够编写卡夫卡消息,但处理速度不够快,无法生成第二个溢出的卡夫卡主题。输入和输出卡夫卡主题名称都是可配置的。可能您会有一个自动触发写入的阈值积压延迟,或者可能您会在拓扑中有一个标志,您可以在拓扑运行时从外部设置该标志。这是一个设计细节,您可以通过它进行操作


这为您提供了一个Flink拓扑,可以及时处理最大数量的消息,同时将无法处理的其余消息写入第二个Kafka主题。然后,您可以运行同一Flink拓扑的第二个实例,该实例从第二个主题读取内容,并在必要时写入第三个主题。如果在拓扑处理的早期写入溢出主题,则可以通过Kafka以最小的延迟将其中几个实例链接在一起,而无需重新配置和重新启动任何拓扑

最直接的方法是修改拓扑结构,使其能够编写卡夫卡消息,但处理速度不够快,无法生成第二个溢出的卡夫卡主题。输入和输出卡夫卡主题名称都是可配置的。可能您会有一个自动触发写入的阈值积压延迟,或者可能您会在拓扑中有一个标志,您可以在拓扑运行时从外部设置该标志。这是一个设计细节,您可以通过它进行操作


这为您提供了一个Flink拓扑,可以及时处理最大数量的消息,同时将无法处理的其余消息写入第二个Kafka主题。然后,您可以运行同一Flink拓扑的第二个实例,该实例从第二个主题读取内容,并在必要时写入第三个主题。如果在拓扑处理的早期写入溢出主题,则可以通过Kafka以最小的延迟将其中几个实例链接在一起,而无需重新配置和重新启动任何拓扑

当负载达到峰值时,资源瓶颈在哪里?读卡夫卡的书够快吗?在CPU或其他资源中由Flink处理数据?我们还没有运行它。但是,假设我们优化了Flink集群的管道性能,并为速率的微小变化留了一点余地,那么在某些情况下,数据速率现在要快2倍,因此当负载达到峰值时,我们需要更多的资源来处理数据,资源瓶颈在哪里?读卡夫卡的书够快吗?在CPU或其他资源中由Flink处理数据?我们还没有运行它。但是,假设我们优化了Flink集群的性能,并为速率的微小变化留了一点余地,那么在某些情况下,数据速率现在要快2倍,因此如果我理解正确,我们需要更多的资源来处理数据,您所说的是为不同的Kafka主题创建应用程序级分区。这可能会解决问题,但需要根据负载管理读者、作者和主题。在我看来,我们自己编写一个自定义的Kafka源代码要容易得多。如果我理解正确的话,您所说的是为不同的Kafka主题创建一个应用程序级分区。这可能会解决问题,但需要根据负载管理读者、作者和主题。在我看来,我们自己编写一个自定义的卡夫卡源代码要容易得多。