Jusqu'à présent, je n'ai pas vu de client python qui implémente la création d'un sujet de manière explicite sans utiliser l'option de configuration pour créer automatiquement les sujets.
Vous pouvez créer des rubriques par programme en utilisant kafka-python
ou confluent_kafka
client qui est un wrapper léger autour 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)
Si vous pouvez exécuter confluent_kafka
(Python) v0.11.6
ou supérieur, voici comment créer kafka topics, list kafka topics et supprimer 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)}
Et pour supprimer kafka topics en utilisant le même kafka_admin
objet, ceci:
kafka_admin.delete_topics(['topic99', 'topic100',]) # DELETE
J'espère que ces opérations vous aideront.
Il semble qu'il n'y ait pas kafka api serveur pour créer un sujet, vous devez donc utiliser la création automatique de sujet de l'outil de ligne de commande ou:
bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test
Il semble que vous pouvez utiliser les éléments suivants pour vous assurer que votre sujet existe déjà (je suppose que vous utilisez l'implémentation suivante kafka python ):
client = KafkaClient(...)
producer = KafkaProducer(...)
client.ensure_topic_exists('my_new_topic')
producer.send_messages('my_new_topic', ...)
C'est déjà trop tard. Je ne connais pas de commande pour la création explicite des sujets mais ce qui suit crée et ajoute les messages.
J'ai créé un python kafka producteur:
prod = KafkaProducer(bootstrap_servers='localhost:9092')
for i in xrange(1000):
prod.send('xyz', str(i))
Dans la liste de Kafka topics xyz
n'était pas là auparavant. Quand j'ai fait la méthode ci-dessus, le client Python-kafka l'a créée et y a ajouté les messages.
L'API AdminClient nécessaire à la création et à la configuration de rubriques programmatiques vient d'être ajoutée dans Kafka 0.11 (initialement pour Java)
Il est prévu que les bibliothèques clientes non Java ajouteront également cette fonctionnalité au fil du temps. Vérifiez auprès de l'auteur du client Kafka Python client que vous utilisez (il y en a plusieurs) pour voir si et quand le support du protocole d'administration KIP-4 sera dans le API
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
topic = 'topic-name'
producer.send(topic, final_list[0]).get(timeout=10)