kafka客户端可以选择要使用的特定分区吗?

时间:2018-05-04 03:10:23

标签: apache-kafka kafka-consumer-api

我有一个kafka客户端实例占用了200个分区,现在我希望它只在前3个kafka分区上使用,以便进行调试和采样。

我有办法做到吗?

或者我可以从所有分区中使用并从非分区的分区中删除消息。有没有办法可以找出来自哪个分区的消息?

3 个答案:

答案 0 :(得分:0)

如果你只想消耗部分分区, 实现org.apache.kafka.clients.consumer.internals.PartitionAssignor

已经apache kafka的测试使用MockPartitionAssignor(扩展PartitionAssignor)

实现PartitionAssignor,并设置" partition.assignment.strategy" 参考:https://kafka.apache.org/documentation/#newconsumerconfigs

答案 1 :(得分:0)

您可以使用KafkaConsumer.assign(java.util.Collection<TopicPartition> partitions)分配一组特定的分区。要找出邮件的分色,您可以使用ConsumerRecord.partition()

答案 2 :(得分:0)

由于您尚未指定您使用的消费者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消费者都必须实现上述功能。