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

ApacheKafka—用于由单个使用者从同一主题的不同分区提取消息的算法/策略

郜玉石
2023-03-14

我已经研究阿帕奇Kafka一段时间了。

让我们考虑下面的例子。

考虑到我有3个分区的主题。我只有一个生产者和一个消费者。我在生成消息时没有指定key属性。

所以我知道在生产者方面,当我发布一条消息时,kafka使用的策略是将消息分配给这两个分区中的任何一个。

现在,我想知道的是,当我开始一个属于某个消费者群体的消费者听同一主题时,它将使用什么策略来从不同的参与者(因为有3个)中提取信息?

它是否会遵循类似的循环模型,即它将向分区1的前导发送一个获取请求,等待响应,获取响应,并将记录返回到进程。然后,向分区2的前导发送一个获取请求,依此类推?

如果它遵循其他策略/算法,我想知道它是什么?

先谢谢你。

共有1个答案

云默
2023-03-14

分区之外没有排序保证,因此在某种程度上,所使用的算法对最终用户来说是没有意义的,并且可能会发生变化。

今天,在这种情况下并没有发生非常复杂的事情。该协议向您显示一个获取请求包含一个分区,因此您可以获取每个分区的获取。这意味着订单取决于消费者。分区不会被饿死,因为将对分配给使用者的所有分区发出获取请求。

 类似资料:
  • 在我的Spring Boot Kafka应用程序中,我有以下使用者配置: 消费者: 如果我理解正确的话,现在我有一个消费者的实例。我想增加post消费者的数量,假设有5个消费者将消费来自${kafka.topic.post.send}的不同(不同)消息,以加快消息消费。 它是否像添加工厂一样简单。setConcurrency(5) 至我的PostKafkAlisterContainerFactor

  • 我们计划编写一个Kafka消费者(java),它读取Kafka队列以执行消息中的操作。

  • 我在Kafka Topic内部有500万条消息。 我必须加入具有相同分区密钥的消息作为单个消息的一部分,并发送给消费者主题[例如:对于密钥1234-Messge1,消费者应该收到单个消息而不是100万消息] Kafka端是否有可用的Kafka API,使用它我可以读取组中具有相同Partition键的所有消息,而不是像传统的spring boot Kafka Listener那样一次读取单个消息。

  • 我有一个usecase,其中传入的数据有一个标识不同类型数据的键。有一个单一的输入Kafka主题,所有类型的数据都抛向它。beam管道从输入的kafka主题中读取所有消息,并必须根据关键字路由到不同的kafka主题。 如何使用apache Beam的kafkaIO生产者?

  • 有没有任何选项或配置可以方便单个Kafka消费者同时消费来自两个不同集群的消息?在创建生产者和消费者时,我将两个集群都提到逗号分隔。我一直在观察消费者只消费来自单个集群的消息。 请参阅下面的说明:消费者C1被配置为监听集群:集群-1:Zooker-1 with Broker-1集群-2:Zooker-2 with Broker-2 我正在寻找一种解决方案,其中消费者C1可以同时消费来自集群1和集群

  • 我刚刚开始使用RabbitMQ和AMQP。 我有一个消息队列 我有多个消费者,我想用相同的消息做不同的事情。 RabbitMQ的大部分文档似乎都集中在循环(round-robin)上,即单个消息由单个消费者使用,负载在每个消费者之间分散。这的确是我目击的行为。 例如:生产者只有一个队列,每2秒发送一次消息: 这里有一个消费者: 如果我启动消费者两次,我可以看到每个消费者都在以循环行为消费交替消息。