繁体   English   中英

卡夫卡消费者多租户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM