这是场景: 我知道使用与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版本中很有趣)。
答案 0 :(得分:0)
在Kafka中,您可以决定要阅读的 主题 , 但是我们无法决定从哪个 分区 我们想要阅读,由Kafka来决定是为了避免更多地阅读相同的消息不止一次。
根据Kafka的定义,消费者不会为了阅读目的而共享分区。
如果您拥有的消费者多于分区,则某些消费者将保持闲置状态,并且不会从任何分区消费。例如,如果我们有5个消费者和4个分区,则1个消费者将保持闲置状态并且不会消费来自kafka经纪人的数据。
实际的分区分配由kafka代理(组协调员)和领导者消费者完成。我们无法控制它。
答案 1 :(得分:0)
此定义对我的帮助最大:
在Apache Kafka中,消费者群体概念是实现两个目标的一种方式 事情:
将消费者作为同一个消费者组的一部分意味着提供“ 竞争消费者”模式,消息将与之一起使用 来自主题的分区分布在组的成员中。每 使用者从一个或多个分区接收消息 (“自动”分配给它),相同的消息将不会 由其他使用者接收(分配给不同的分区)。在 这样,我们可以将消费者数量扩展到 分区(一个消费者只能读取一个分区);在 在这种情况下,加入该组的新消费者将处于空闲状态 没有分配给任何分区。
将消费者分为不同的消费者群体意味着提供“ 发布/订阅”模式,其中来自 主题分区被发送给不同消费者之间的所有消费者 组。这意味着在同一个消费者群体中,我们将拥有 上面解释的规则,但是在不同的群体中,消费者将 收到相同的消息。当其中的邮件 该主题对于将要处理的不同应用程序很重要 他们以不同的方式。我们希望所有感兴趣的应用 接收来自该主题的所有相同消息。