kafka stickyassignor打破了对组中单个消费者的交付

wwodge7n  于 2021-06-08  发布在  Kafka
关注(0)|答案(0)|浏览(194)

我有一个主题,其中有一个分区和两个消费进程,它们构成了一个消费组。
这样,消息总是传递给单个消费者。stickyassignor用于偏好已在重新平衡时分配给分区的使用者。
我一直在玩这个设置,发现在某些情况下,消息会传递给两个消费者,这就打破了消费者群体的目的。
场景如下:
启动耗电元件c1
c1开始接收消息
启动消费品c2
c2不接收任何消息-这要感谢喜欢c1的stickyassignor策略
冻结c1进程-(使用java调试器-停止所有线程)
c2接管-开始接收消息
解冻c1过程
现在,c1和c2都接收消息,尽管它们在同一组中
使用rangeassignor/roundrobinassignor时,不会发生这种情况。
我遗漏了什么还是Kafka的一个错误?
这是我的消费代码:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test");
props.put("client.id", consumerId);
props.put("enable.auto.commit", "false");
props.put("auto.commit.interval.ms", "1000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("partition.assignment.strategy", StickyAssignor.class.getName());
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);

consumer.subscribe(Collections.singleton("my-events"));

while (true) {
    ConsumerRecords<String, String> records = consumer.poll(100);
    for (ConsumerRecord<String, String> record : records)
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题