我是使用python kafka客户端的新手,我需要一些帮助来描述使用客户端的主题。
我能够使用以下代码列出我所有的kafka主题:-
consumer = kafka.KafkaConsumer(group_id='test', bootstrap_servers=['kafka1'])
topicList = consumer.topics()
答案 0 :(得分:4)
我发现了如何使用kafka-python进行操作:
from kafka.admin import KafkaAdminClient, ConfigResource, ConfigResourceType
KAFKA_URL = "localhost:9092" # kafka broker
KAFKA_TOPIC = "test" # topic name
admin_client = KafkaAdminClient(bootstrap_servers=[KAFKA_URL])
configs = admin_client.describe_configs(config_resources=[ConfigResource(ConfigResourceType.TOPIC, KAFKA_TOPIC)])
config_list = configs.resources[0][4]
在 config_list (元组列表)中,您具有该主题的所有配置。
答案 1 :(得分:1)
引用:https://docs.confluent.io/current/clients/confluent-kafka-python/
kafka.admin.TopicMetadata.partitions提供:confluent_kafka.admin.PartitionMetadata(分区ID,领导者,副本,isrs)
from confluent_kafka.admin import AdminClient
kafka_admin = AdminClient({"bootstrap.servers": bootstrap_servers})
for topic in topics:
x = kafka_admin.list_topics(topic=topic)
print x.topics, '\n'
for key, value in x.topics.items():
for keyy, valuey in value.partitions.items():
print keyy, ' Partition id : ', valuey, 'leader : ', valuey.leader,' replica: ', valuey.replicas
答案 2 :(得分:0)
有趣的是,对于Java,此功能(describeTopics()
)位于KafkaAdminCLient.java中。
因此,我试图寻找与之等效的python,然后发现了code repository of kafka-python。
kafka-python软件包中与admin-client等效的文档(在线注释)如下:
describe topics functionality is in ClusterMetadata Note: if implemented here, send the request to the controller
然后我在同一存储库中切换到cluster.py file。其中包含用于检索主题列表的topics()
函数和以下两个可以帮助您实现describe
功能的函数:
partitions_for_topic()
-返回主题的所有分区集(无论是否可用)available_partitions_for_topic()
-返回具有已知领导者的分区集 注意:我自己还没有尝试过,所以我不确定是否该行为与您在kafka-topics --describe ...
命令的结果中看到的行为相同,但值得尝试。
我希望这会有所帮助!
答案 3 :(得分:0)
参考了多篇文章和代码示例后,我能够使用confluent_kafka通过describe_configs做到这一点。
链接1 [Confluent-kafka-python] 链接2 Git Sample
下面是我的示例代码!
from confluent_kafka.admin import AdminClient, NewTopic, NewPartitions, ConfigResource
import confluent_kafka
import concurrent.futures
#Creation of config
conf = {'bootstrap.servers': 'kafka1','session.timeout.ms': 6000}
adminClient = AdminClient(conf)
topic_configResource = adminClient.describe_configs([ConfigResource(confluent_kafka.admin.RESOURCE_TOPIC, "myTopic")])
for j in concurrent.futures.as_completed(iter(topic_configResource.values())):
config_response = j.result(timeout=1)