Может ли клиент kafka выбрать определенный раздел для потребления? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть один экземпляр клиента kafka, который потребляет 200 разделов, теперь я хочу, чтобы он использовался только на первых 3 разделах kafka для целей отладки и выборки.

Есть ли способ, которым я могу это сделать?

Или, в качестве альтернативы, я могу потреблять сообщения со всех разделов и удалять сообщения из разделов, не относящихся к первым 3 разделам. Есть ли способ узнать, с какого раздела отправлено сообщение?

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Вы можете использовать KafkaConsumer.assign(java.util.Collection<TopicPartition> partitions) для назначения определенного набора разделов. Чтобы узнать часть сообщения вы можете использовать ConsumerRecord.partition()

0 голосов
/ 04 мая 2018

Поскольку вы не указали, какой потребительский API вы используете, я приведу пример на основе библиотеки Python kafka-python .

consumer = KafkaConsumer('my-topic',
group_id='my-group',
bootstrap_servers=['host:9092'])

for message in consumer: 
    if message.partition in [0, 1, 2]:
        # do something with message.value

Если вы действительно хотите читать только из подмножества разделов, вы можете сделать что-то вроде:

consumer.assign([TopicPartition('foobar', 2)])
next_message = next(consumer)

будет работать для вас. Но я бы предложил первый подход. Независимо от языка разработки, который вы выбираете, все потребители Kafka должны реализовывать вышеуказанные функции.

0 голосов
/ 04 мая 2018

, если вы хотите использовать только частично раздел, внедрить org.apache.kafka.clients.consumer.internals.PartitionAssignor

уже используется Apache Kafka для проверки MockPartitionAssignor (расширяет PartitionAssignor)

реализовать PartitionAssignor и установить "partition.assignment.strategy" ссылка: https://kafka.apache.org/documentation/#newconsumerconfigs

...