I'm using: https://github.com/mumrah/kafka-python as a kafka api in Python. I want to get the number of partitions for a specified topic. How do I do that?
Asked
Active
Viewed 1.3k times
4 Answers
14
Might be a slightly simplistic solution, but:
from kafka import KafkaClient
client = KafkaClient('SERVER:PORT')
topic_partition_ids = client.get_partition_ids_for_topic(b'TOPIC')
len(topic_partition_ids)
tested on Python 3.4.3 / kafka-python 0.9.3

Chaffelson
- 1,249
- 9
- 20
-
1consider adding: a = len(topic_partition_ids) print(topic_partition_ids) print(a) – Rubber Duck Jul 05 '18 at 06:19
-
3this has been deprecated, try using "partitions_for_topic": https://kafka-python.readthedocs.io/en/master/apidoc/KafkaConsumer.html#kafka.KafkaConsumer.partitions_for_topic – Alan May 16 '19 at 03:12
-
As suggested by @Alan try to use : client.cluster.partitions_for_topic(topic) – Soufiane Roui Mar 15 '21 at 15:49
3
For those of you using Confluent-Python or the enterprise API. This can be done this way:
cluster_data: ClusterMetadata = producer.list_topics(topic=TOPIC)
topic_data: TopicMetadata = cluster_data.topics[TOPIC]
available_partitions: PartitionMetadata = topic_data.partitions
print("Count of partitions:", len(available_partitions))
2
I found this question while trying to solve this exact same problem. I know the question is old, but here is the solution I came up with (using Kazoo to talk to 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)

sterne
- 645
- 1
- 6
- 15
2
Python 3.8.10/kafka-python 2.0.2 Solution:
from kafka import KafkaConsumer
def get_partitions_number(server, topic):
consumer = KafkaConsumer(
topic,
bootstrap_servers=server
)
partitions = consumer.partitions_for_topic(topic)
return len(partitions)

Rubén Pozo
- 1,035
- 1
- 12
- 23