当前位置: 首页 > 知识库问答 >
问题:

Kafka流-多个主题作为同一个源还是每个源一个主题?

阎劲
2023-03-14

在构建Kafka Streams拓扑时,可以通过两种不同的方式对多个主题的读取进行建模:

  1. 读取具有相同源节点的所有主题。

拓扑Builder.add源代码("source ceName",...,"topic1","topic2","topic3");

topologyBuilder.addSource("sourceName1", ..., "topic1")
               .addSource("sourceName2", ..., "topic2")
               .addSource("sourceName3", ..., "topic3");

选项1相对于选项2是否有相对优势,反之亦然?所有主题都包含相同类型的数据,并具有相同的数据处理逻辑。

共有2个答案

马丰
2023-03-14

还有其他几个因素需要考虑。

如果您的输入数据在输入主题之间均匀分布(按消息的大小和速率),那么选择选项1,因为它很简单。如果不是,那么“慢”主题会降低你的整体消费,所以要想在“快”主题上实现更小的延迟,请选择选项2。

如果您在不同的节点上并行运行多个这样的拓扑(为了高可用性或高吞吐量),那么拥有一个用户组(选项1)将导致更多用户在其中进行协调。根据我的经验,这也会减缓消费,尤其是当你重新启动消费者时(或者如果他们闹翻了)。在这种情况下,我也选择了选项2:团队中的消费者越少,需要的协调工作就越少,延迟就越短。

汤嘉平
2023-03-14

考虑到如您所述,所有输入主题都包含相同类型的数据,并且数据的后续处理是等效的,您很可能应该选择选项1,原因有以下两个:

1)这将导致更小的拓扑

2)您只需要将一个源节点连接到后续处理步骤

如果在稍后的时间点,不同的源主题需要不同的处理,则可以将源节点拆分为多个。

 类似资料:
  • 我们有一个Kafka主题,有源源不断的数据。为了处理它,我们有一个无状态的Flink管道,它使用该主题并写入另一个主题。 我们是不是漏掉了什么?我们误会什么了吗?有没有更好的解决办法? 谢了!

  • 我们有一个传入的kafka主题,多个基于Avro模式的消息序列化到其中。 我们需要将Avro格式的消息拆分为多个其他kafka主题,基于某个公共模式属性的值。 想了解如何实现它,同时避免在汇流平台上构建中间客户端来进行这种拆分/路由。

  • 我正在使用Spring Cloud Stream Kafka Binder。我有以下Kafka活页夹函数。 在yml中,我有: 如果我想从同一个功能向两个不同的主题发送数据,我需要做什么?

  • 配置的application.yaml如下所示。这个想法是我有3个输入和3个输出主题。该组件从input topic获取输入,并将输出提供给OutputTopic。 引发的异常为 谁能帮助我与Kafka Streams Spring-Kafka代码样本处理与多个输入和输出主题。 更新:2021年1月21日

  • 我想为几个主题创建一个kafka消费者。consumer的方法构造函数允许我在订阅中传输主题列表的参数,如下所示: 之后,我想轮询记录从Kafka流每3秒并处理它们,但我想知道什么是这个消费者-如何将不同主题的记录轮询-首先一个主题,然后另一个,或并行。会不会一个消息量大的主题会一直处理,另一个消息量小的主题会等待?

  • 我有2个Kafka的主题流完全相同的内容从不同的来源,所以我可以有高可用性的情况下,其中一个来源失败。我正在尝试使用Kafka Streams0.10.1.0将2个主题合并为1个输出主题,这样我就不会错过任何关于失败的消息,并且当所有源都启动时没有重复的消息。 当使用KStream的方法时,其中一个主题可以毫无问题地关闭(次要主题),但是当主主题关闭时,将不会向输出主题发送任何内容。这似乎是因为,