ответ

2

Я нашел этот вопрос, пытаясь решить эту ту же проблему. Я знаю, вопрос старый, но вот решение, которое я придумал (используя Kazoo поговорить с Zookeeper):

from kazoo.client import KazooClient 

class KafkaInfo(object): 
    def __init__(self, hosts): 
     self.zk = KazooClient(hosts) 
     self.zk.start() 

    def topics(self): 
     return self.zk.get_children('/brokers/topics') 

    def partitions(self, topic): 
     strs = self.zk.get_children('/brokers/topics/%s/partitions' % topic) 
     return map(int, strs) 

    def consumers(self): 
     return self.zk.get_children('/consumers') 

    def topics_for_consumer(self, consumer): 
     return self.zk.get_children('/consumers/%s/offsets' % consumer) 

    def offset(self, topic, consumer, partition): 
     (n, _) = self.zk.get('/consumers/%s/offsets/%s/%d' % (consumer, topic, partition)) 
     return int(n) 
5

Может быть немного упрощенным решением, но:

from kafka import KafkaClient 

client = KafkaClient('SERVER:PORT') 
topic_partition_ids = client.get_partition_ids_for_topic(b'TOPIC') 
len(topic_partition_ids) 

протестирован на Python 3.4.3/kafka-python 0.9.3

Смежные вопросы