我有一个kafka客户端实例占用了200个分区,现在我希望它只在前3个kafka分区上使用,以便进行调试和采样。
我有办法做到吗?
或者我可以从所有分区中使用并从非分区的分区中删除消息。有没有办法可以找出来自哪个分区的消息?
答案 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消费者都必须实现上述功能。