#python #apache-kafka #kafka-python
#python #apache-kafka #kafka-python
Вопрос:
Я запустил приведенный ниже код в оболочке Python:
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
future = producer.send('hello-topic', b'Hello, World!')
Это отлично работает в том смысле, что потребитель Kafka получает сообщения.
НО…
Запуск его через скрипт ничего не делает. Я упускаю что-то очевидное?
Единственный способ заставить его работать как скрипт — добавить эту строку…
future.get(timeout=10)
Любая помощь будет оценена.
Комментарии:
1. добавьте
producer.flush()
, и все готово. так что реально, скорее всего, у вас будет цикл и он будет выполнятьсяproducer.send
много раз. эти сообщения могут быть отправлены или не отправлены во время процесса, но flush гарантирует это. Я думаюfuture.get()
, это также гарантирует, но вы не захотите использовать это для каждого вызова отправки.
Ответ №1:
подробности kafka send() по ссылке : send() является асинхронным. При вызове он добавляет запись в буфер ожидающих отправки записей и немедленно возвращает. Это позволяет производителю объединять отдельные записи для повышения эффективности. Вы можете использовать метод flush() / poll() для немедленной отправки сообщения.