web-dev-qa-db-ja.com

プログラムでApacheにトピックを作成する方法Kafka using Python

これまでのところ、トピックを自動的に作成する構成オプションを使用せずに、トピックの作成を明示的に実装するpythonクライアントは見ていません。

29
jpgerek

プログラムでトピックを作成できます kafka-python または confluent_kafkalibrdkafka の軽量ラッパーであるクライアント。

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)
10

confluent_kafka(Python)v0.11.6以上を実行できる場合、以下はcreate kafka topicsリストkafkaトピックおよびdelete kafkaトピック

>>> 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

これらの操作がお役に立てば幸いです。

3
NYCeyes

kafkaトピックを作成するサーバーAPIがないため、トピックの自動作成またはコマンドラインツールを使用する必要があります。

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

以下を使用して、トピックが既に存在することを確認できるようです(私は次の kafka python 実装を使用していると想定しています)。

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

もう手遅れです。トピックを明示的に作成するためのコマンドについては知りませんが、以下はメッセージを作成して追加します。

python kafkaプロデューサー:

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

Kafkaトピックxyzのリストには以前はありませんでした。上記の方法を実行すると、Python-kafkaクライアントがそれを作成し、メッセージを追加しました。

0
wonder

プログラムによるトピックの作成と構成に必要な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使用しているクライアント(いくつかあります))の作成者に問い合わせて、KIP-4管理プロトコルのサポートがAPI

https://cwiki.Apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations を参照してください

0
Hans Jespersen
from kafka import KafkaProducer

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

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