Spring Kafka消费者:有没有办法使用Kafka 0.8读取多个分区?

时间:2017-04-17 19:51:48

标签: spring apache-kafka spring-integration kafka-consumer-api spring-kafka

这是场景: 我知道使用与Spring kafka相关的最新API(如Spring-integration-kafka 2.10),我们可以做类似的事情:

@KafkaListener(id = "id0", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic", partitions = { "0" }) })

@KafkaListener(id = "id1", topicPartitions = { @TopicPartition(topic = "SpringKafkaTopic", partitions = { "1" }) })

以及与同一kafka主题相关的不同分区的读取。

我想知道我们是否可以使用相同的功能,例如spring-integration-kafka 1.3.1

我没有找到关于如何做到这一点的任何提示(我在xml版本中很有趣)。

2 个答案:

答案 0 :(得分:0)

在Kafka中,您可以决定要阅读的 主题 , 但是我们无法决定从哪个 分区 我们想要阅读,由Kafka来决定是为了避免更多地阅读相同的消息不止一次。

根据Kafka的定义,消费者不会为了阅读目的而共享分区。

如果您拥有的消费者多于分区,则某些消费者将保持闲置状态,并且不会从任何分区消费。例如,如果我们有5个消费者和4个分区,则1个消费者将保持闲置状态并且不会消费来自kafka经纪人的数据。

实际的分区分配由kafka代理(组协调员)和领导者消费者完成。我们无法控制它。

答案 1 :(得分:0)

此定义对我的帮助最大:

  

在Apache Kafka中,消费者群体概念是实现两个目标的一种方式   事情:

     

将消费者作为同一个消费者组的一部分意味着提供“ 竞争消费者”模式,消息将与之一起使用   来自主题的分区分布在组的成员中。每   使用者从一个或多个分区接收消息   (“自动”分配给它),相同的消息将不会   由其他使用者接收(分配给不同的分区)。在   这样,我们可以将消费者数量扩展到   分区(一个消费者只能读取一个分区);在   在这种情况下,加入该组的新消费者将处于空闲状态   没有分配给任何分区。

     

将消费者分为不同的消费者群体意味着提供“ 发布/订阅”模式,其中来自   主题分区被发送给不同消费者之间的所有消费者   组。这意味着在同一个消费者群体中,我们将拥有   上面解释的规则,但是在不同的群体中,消费者将   收到相同的消息。当其中的邮件   该主题对于将要处理的不同应用程序很重要   他们以不同的方式。我们希望所有感兴趣的应用   接收来自该主题的所有相同消息。

从这里Don't Use Apache Kafka Consumer Groups the Wrong Way!