簡體   English   中英

如何使用 Python 以編程方式在 Apache Kafka 中創建主題

[英]How to programmatically create a topic in Apache Kafka using Python

到目前為止,我還沒有看到 python 客戶端在不使用配置選項自動創建主題的情況下顯式實現主題的創建。

您可以使用kafka-pythonconfluent_kafka客戶端以編程方式創建主題,后者是librdkafka的輕量級包裝器。


使用kafka-python

from kafka.admin import KafkaAdminClient, NewTopic


admin_client = KafkaAdminClient(
    bootstrap_servers="localhost:9092", 
    client_id='test'
)

topic_list = []
topic_list.append(NewTopic(name="example_topic", num_partitions=1, replication_factor=1))
admin_client.create_topics(new_topics=topic_list, validate_only=False)

使用confluent_kafka

from confluent_kafka.admin import AdminClient, NewTopic


admin_client = AdminClient({
    "bootstrap.servers": "localhost:9092"
})

topic_list = []
topic_list.append(NewTopic("example_topic", 1, 1))
admin_client.create_topics(topic_list)

如果可以運行confluent_kafka (Python) v0.11.6或以上版本,那么下面是如何create kafka topicslist kafka topicsdelete kafka topics

>>> import confluent_kafka.admin, pprint

>>> conf        = {'bootstrap.servers': 'broker01:9092'}
>>> kafka_admin = confluent_kafka.admin.AdminClient(conf)

>>> new_topic   = confluent_kafka.admin.NewTopic('topic100', 1, 1)
                  # Number-of-partitions  = 1
                  # Number-of-replicas    = 1

>>> kafka_admin.create_topics([new_topic,]) # CREATE (a list(), so you can create multiple).
    {'topic100': <Future at 0x7f524b0f1240 state=running>} # Stdout from above command.

>>> pprint.pprint(kafka_admin.list_topics().topics) # LIST
    {'topic100' : TopicMetadata(topic100, 1 partitions),
     'topic99'  : TopicMetadata(topic99,  1 partitions),
     'topic98'  : TopicMetadata(topic98,  1 partitions)}

要使用相同的kafka_admin對象delete kafka topics ,請執行以下操作:

kafka_admin.delete_topics(['topic99', 'topic100',]) # DELETE

我希望這有幫助。 \\(◠﹏◠)/

看起來您可以使用以下內容來確保您的主題已經存在(我假設您正在使用以下kafka python實現):

client = KafkaClient(...)
producer = KafkaProducer(...)
client.ensure_topic_exists('my_new_topic')
producer.send_messages('my_new_topic', ...)

好像沒有kafka server api來創建topic所以得用topic自動創建或者命令行工具:

bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test

已經太晚了。 我不知道用於顯式創建主題的命令,但以下命令會創建並添加消息。

我創建了一個 python kafka 生產者:

prod = KafkaProducer(bootstrap_servers='localhost:9092')
for i in xrange(1000):
    prod.send('xyz', str(i))

在 Kafka 主題列表中, xyz以前不存在。 當我執行上述方法時,Python-kafka 客戶端創建了它並將消息添加到其中。

進行編程主題創建和配置所需的 AdminClient API 剛剛添加到 Kafka 0.11(最初用於 Java)

https://cwiki.apache.org/confluence/display/KAFKA/KIP-117%3A+Add+a+public+AdminClient+API+for+Kafka+admin+operations

隨着時間的推移,預計非 Java 客戶端庫也將添加此功能。 與您正在使用的 Kafka Python 客戶端(有多個)的作者聯系,以查看是否以及何時在 API 中提供 KIP-4 管理協議支持

https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
topic = 'topic-name'

producer.send(topic, final_list[0]).get(timeout=10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM