Как отправлять сообщения с 2 потребителями с одинаковым идентификатором группы?

#python #apache-kafka

#python #apache-kafka

Вопрос:

Я хочу иметь возможность использовать данные один раз от 2 разных потребителей (каждый потребитель будет получать разные сообщения) при использовании одинаковых topic и одинаковых group-id .

Производитель:

 producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                             value_serializer=lambda x:
                             dumps(x).encode('utf-8'))
    for e in range(50):
        data = {'number' : e}
        print('Producer {}'.format(data))
        producer.send('test', value=data)
        sleep(2)
  

Первый потребительский код:

 consumer = KafkaConsumer(
        'test',
        bootstrap_servers=['localhost:9092'],
        auto_offset_reset='earliest',
        enable_auto_commit=True,
        #auto_commit_interval_ms=100,
        group_id='my-group',
        value_deserializer=lambda x: loads(x.decode('utf-8')))

for message in consumer:
    message = message.value
    print('[1] Consume {}'.format(message))
    sleep(3)
  

Второй потребительский код:

 consumer = KafkaConsumer(
        'test',
        bootstrap_servers=['localhost:9092'],
        auto_offset_reset='earliest',
        enable_auto_commit=True,
        #auto_commit_interval_ms=100,
        group_id='my-group',
        value_deserializer=lambda x: loads(x.decode('utf-8')))

 for message in consumer:
        message = message.value
        print('[2] Consume {}'.format(message))
        sleep(5)
  

Я ожидаю увидеть, что некоторые сообщения используются, consumer-1 а другие сообщения consumer-2 (в соответствии с командой sleep в consumer коде)

Но кажется, что работает только один потребитель и получает все сообщения. (Первый потребитель застрял, а второй потребитель получает сообщения).

чего мне не хватает?

Ответ №1:

Из описания проблемы я предполагаю, что в вашей теме есть только один раздел.

Для вашей темы требуется более одного раздела, если вы хотите запустить более одного пользователя в группе