Два потребителя Кафки вызывают странное поведение друг с другом

У меня есть два потребителя с разными идентификаторами клиентов и идентификаторами групп. Помимо часа хранения и максимального количества разделов, моя установка Kafka содержит конфигурацию по умолчанию. Я посмотрел вокруг, чтобы увидеть, если кто-то еще имел такую ​​же проблему, но не может получить какие-либо результаты.

Итак, сценарий выглядит так:

Потребитель A: подключается к Kafka, потребляет около 3 миллионов сообщений, которые необходимо использовать, а затем бездействует в ожидании новых сообщений.

Потребитель B: другой идентификатор клиента / группы, подключается к одной и той же теме Kafka, и это приводит к тому, что потребитель A получает повторение 3 миллионов сообщений, в то время как потребитель B также потребляет их.

Два потребителя - это два совершенно разных приложения Java с разными идентификаторами клиента и группы, работающими на одном компьютере. Сервер Kafka находится на другом компьютере.

Это нормальное поведение в Кафке? Я в полной растерянности.

Вот мой потребительский конфиг:

bootstrap.servers=192.168.110.109:9092
acks=all
max.block.ms=2000
retries=0
batch.size=16384
auto.commit.interval.ms=1000
linger.ms=0
key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
block.on.buffer.full=true
enable.auto.commit=false
auto.offset.reset=none
session.timeout.ms=30000
zookeeper.session.timeout=100000
rebalance.backoff.ms=8000

group.id=consumerGroupA
zookeeper.connect=192.168.110.109:2181
poll.interval=100

И очевидная разница в моем потребителе Б group.id=consumerGroupB

1 ответ

Решение

Это правильное поведение. Потому что, основываясь на ваших конфигах, ваши потребители не фиксируют смещение записей, которые они прочитали!

Когда потребитель читает запись, он должен зафиксировать ее чтение, вы можете убедиться, что потребители автоматически фиксируют смещения, установив enable.auto.commit=true или передайте каждую запись вручную. В этом случае я думаю, что автоматическое принятие хорошо для вас.

Другие вопросы по тегам