【发布时间】:2021-05-15 14:55:31
【问题描述】:
我有一个包含 10 个分区的 kafka 主题。我计划在不同的服务器上部署两个应用程序。一个应用程序将从分区 0 到 4 读取。而另一个应用程序将从分区 5 到 9 读取。
部署 1
@KafkaListener(topicPartitions =
{ @TopicPartition(topic = "testpartition", partitions = { "0", "1","2", "3","4" })
})
public void receive(ConsumerRecord record) {
System.out.println(String.format("Listener 1 -Topic - %s, Partition - %d, Value: %s", kafkaTopic, record.partition(), record.value()));
}
部署 2
@KafkaListener(topicPartitions =
{ @TopicPartition(topic = "testpartition", partitions = { "5", "6","7", "8","9" })
})
public void receive(ConsumerRecord record) {
System.out.println(String.format("Listener 2 -Topic - %s, Partition - %d, Value: %s", kafkaTopic, record.partition(), record.value()));
}
所以我们将有两个消费者组,因为应用程序分别部署在不同的服务器上。
由于每个应用程序都从不同的分区消费
这会导致对 kafka 主题的消息进行不必要的复制吗?
所有消息都会被复制两次。另外,如果是这种情况,是否会出现消息重复?
这是在分布式环境中部署消费者应用程序的正确方法还是有更好的方法?
【问题讨论】:
标签: spring spring-boot apache-kafka kafka-consumer-api spring-kafka