web-dev-qa-db-fra.com

Comment créer par programmation un sujet dans Apache Kafka using Python

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.

29
jpgerek

Vous pouvez créer des rubriques par programme en utilisant kafka-python ou confluent_kafka client qui est un wrapper léger autour librdkafka .

En utilisant 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)

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

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.

3
NYCeyes

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

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', ...)
1
Salvador Dali

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.

0
wonder

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)

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

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

Voir 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