如何在Python中使用kafka客户端描述主题

时间:2019-05-22 12:52:22

标签: python kafka-python

我是使用python kafka客户端的新手,我需要一些帮助来描述使用客户端的主题。

我能够使用以下代码列出我所有的kafka主题:-

consumer = kafka.KafkaConsumer(group_id='test', bootstrap_servers=['kafka1'])
topicList = consumer.topics()

4 个答案:

答案 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/

  1. list_topics提供confluent_kafka.admin.TopicMetadata(主题, 分区)
  2. 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功能的函数:

  1. partitions_for_topic()-返回主题的所有分区集(无论是否可用)
  2. 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)