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

从一个Kafka主题消费的多个Storm拓扑

艾泰
2023-03-14

我试着把这个理论与缩放工人做比较。

但是,使用版本1.2.1时,storm Kafka spout在多个不同的拓扑中的行为并不像我预期的那样。

为单个主题的所有拓扑中的kafka spout使用者设置一个公共client.id和group.id,每个拓扑仍然订阅所有可用的分区和重复的元组,并在重新提交已提交的元组时抛出错误。

如果有人能解释一下

  1. Kafka喷口的这种行为的实现逻辑是什么?
  2. 有解决此问题的方法吗?

共有1个答案

苏墨竹
2023-03-14

spout的默认行为是使用kafkaconsumer.assignAPI将主题的所有分区分配给拓扑中的工作者。这就是你正在看到的行为。使用此行为,您不应该在拓扑之间共享组ID。

如果希望更好地控制哪些分区分配给哪些工作者或拓扑,可以实现TopicFilter接口,并将其传递给kafkaspoutconfig。这应该能让你做你想做的事。

关于更快地运行多个拓扑,我假设您指的是文档中的这一节:在多工作者模式中,消息经常跨越工作者进程边界。对于性能敏感的情况,如果可以配置拓扑以运行尽可能多的单工作者实例[...]它可能会产生更好的吞吐量和延迟。这里的目标是避免在工作人员之间发送消息,而是将每个分区的处理过程保持在一个工作人员内部。如果您希望避免运行许多拓扑,您可以考虑定制Storm调度程序,使其在每个Worker中分配一个完整的管道副本。这样,如果您使用localorshufflegrouping,将始终有一个本地bolt要发送到,因此您不必通过网络发送到另一个工作者。

 类似资料:
  • 我的问题与单个消费者从多个话题消费有关。假设所有主题都加载了1M个记录,一个使用者必须处理这些记录。它将按照什么顺序从主题中读取(我的意思是首先读取哪个主题/分区,等等) Kafka内部资料的任何链接会有帮助吗?

  • 我们正在开发一个应用程序,我们想听Kafka中不止一个主题。所有主题都有一个分区。所有主题名称都有一个公共的前缀,例如“test-x”、“test-y”,所以我们可以对它使用spring。 我们希望编写一个java spring使用者,它使用模式监听所有主题。我们的想法是,我们可以运行同一个消费者(属于同一个组)的多个实例,Kafka将为不同的消费者分发来自不同主题的消息。 然而,这似乎并不奏效。

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

  • 我有一个spring boot项目,我是spring-kafka来连接底层的kafka事件枢纽。 我不得不在同一节消费者课上听2个不同的话题。我有两种方法可以这样做。 一个是要有两个这样的Kafka听众: 另一种方法是在同一个kafkaListener中有两个主题,如下所示 ===================edit===============application.yml中的Kafka属性

  • 如何在apache/kafka中使用regex消费所有主题?我尝试了上面的代码,但不起作用。

  • 我有两个组id相同的消费者服务器订阅了相同的主题。kafka服务器仅使用一个分区运行。据我所知,消息应该在这两个消费者服务器中随机使用。但现在似乎总是同一个消费者服务器A消费消息,另一个不消费消息。如果我停止消费者服务器A,另一个将正常工作。我所期望的是,他们可以随机消费信息。