[英]Kafka Consumer multi tenancy
我是编写 Kafka 消费者的新手,我有一个场景,以防我有两个消费者在同一个组 ID 下运行并且我有两个分区。
假设;
消费者 1===>链接到 ====>分区 1
消费者 2===>链接到 ====>分区 2
我的情况是我的消费者 2 关闭了如何确保我的消费者 1 重新读取所有来到分区 2 的事件,我刚刚遇到了一些关于 setConsumerRebalanceListener 的事情,所以我已经为此设置了我的容器属性,以及我正在设置的 onPartitionsAssigned 方法consumer.seekToBeginning(consumer.assignment())
这是正确的,这一行是否意味着我的消费者 1 也会在消费者 2 关闭并且分区 2 重新分配给消费者时从分区 2 读取所有事件?
我还会请求是否有人可以分享一些好的链接,我可以在其中阅读有关ConsumerRebalanceListener
的基础知识。
public ConcurrentKafkaListenerContainerFactory<String, MultiTenancyOrgDataMessage> kafkaListenerContainerFactory() {
LOG.debug("ConcurrentKafkaListenerContainerFactory executing");
ConcurrentKafkaListenerContainerFactory<String, MultiTenancyOrgDataMessage> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE);
factory.getContainerProperties().setConsumerRebalanceListener(new ConsumerAwareRebalanceListener() {
@Override
public void onPartitionsAssigned(Consumer<?, ?> consumer, Collection<TopicPartition> partitions) {
consumer.seekToBeginning(consumer.assignment()); // read topic from beginning on service restart
}
});
这就是提交的用途——如果消费者 2 宕机,那么它已经消费但未提交的任何记录都将在重新平衡后由消费者 1 获取。
这是 Kafka 支持至少一次语义的一个原因——在重新平衡之后,消费者 1 将从最后提交的偏移量中提取,因此如果消费者 2 在提交之前死亡,则可以处理消费者 2 已成功处理的记录。
您可能使用 ConsumerRebalanceListener 的一个例子是处理重新平衡时的暂停 - 我已经在https://chrisg23.blogspot.com/2020/02/why-is-pausing-kafka-consumer-so 上写过这个。 html?m=1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.