Кафка не получает сообщения при указании group_id в Python

1

Я использую Kafka (kafka-python) версию 3.0.0-1.3.0.0.p0.40. Мне нужно настроить потребителя для темы "симуляция" в Python. Когда я не укажу group_id, т.е. group_id = None, он получает сообщения в порядке. Однако, если я укажу group_id, он не получит никаких сообщений.

Здесь мой код в Python:

consumer = KafkaConsumer(bootstrap_servers='XXX.XXX.XXX.XXX:9092',
                         group_id = 'myTestGroupID', enable_auto_commit = True)
consumer.subscribe(['simulation'])
# not using assign method here as auto_commit is enabled
# partitions = [TopicPartition('simulation',num) for num in range(0,9)]
# consumer.assign([TopicPartition('simulation', partitions[0])])

while not self.stop_event.is_set():
    for message in consumer:
        print(message)

Я попытался найти некоторые значения по умолчанию group_id в файлах потребительских свойств, я нашел один cloudera_mirrormaker, но ничего не изменилось. Мне нужно будет использовать несколько пользователей, поэтому важно, что у меня есть group_id, и они имеют один и тот же group_id. Во многих источниках я обнаружил, что group_id может быть любой строкой...

Когда я запускаю пользователя для этой темы в консоли, он работает и получает сообщения

./kafka-console-consumer.sh --bootstrap-server XXX.XXX.XXX.XXX:9092 --topic simulation --from-beginning --consumer-property group.id=myTestGroupID  --partition 0

когда я запускаю kafka-consumer-groups.sh, чтобы список всех доступных групп был пустым.

Если у кого-то есть идея, почему он застрял на Python, это было бы так высоко оценено. большое спасибо

Вот код для производителя (я уменьшил его для простоты, так как в этом случае он не изменит проблему)

from kafka import KafkaProducer
class Producer(threading.Thread):
    ...
    def run(self):
        producer = KafkaProducer(bootstrap_servers='XXX.XXX.XXX.XXX:9092')
        while not self.stop_event.is_set():
            string = 'test %s' %time.time()
            producer.send('simulation', string.encode())
            time.sleep(0.5)
        producer.close()
  • 0
    bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group вы описать эту группу на kafka bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
  • 0
    Если вы использовали все смещения в консоли для одной и той же группы, то python не получит никаких сообщений, в противном случае, что такое self.stop_event.is_set() ? Пожалуйста, покажите минимальный воспроизводимый пример
Показать ещё 5 комментариев
Теги:
apache-kafka
kafka-consumer-api
kafka-python

1 ответ

0

Вопрос: Кафка не получает сообщений при указании group_id


Попробуйте передать тему на экземпляр KafkaConsumer, как в документации:

# join a consumer group for dynamic partition assignment and offset commits
from kafka import KafkaConsumer
consumer = KafkaConsumer('simulation', group_id='myTestGroupID')
for msg in consumer:
    print (msg)

Документация: KafkaConsumer четко описывает тип group-id:

group_id (str или None) - имя группы потребителей для объединения для назначения динамических разделов (если включено), а также для извлечения и фиксации смещений. Если "Нет", автоматическое разделение (через координатор группы) и фиксация смещения отключены. По умолчанию: нет

  • 2
    Я тоже пробовал это указывать на тему при создании экземпляра, но это не помогло ... из kafka import KafkaConsumer consumer = KafkaConsumer ('моделирование', group_id = 'myTestGroupID', bootstrap_servers = 'XXX.XXX.XXX.XXX: 9092 ', enable_auto_commit = True) для msg в потребителе: print (msg)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню