2017-10-13 7 views
0

Machine_1의 python 스크립트를 통해 Machine_2의 카프카 주제에 일부 메시지를 보내려고합니다. Machine_2Machine_1은 모두 동일한 네트워크에 있으며 둘 다 Azure의 VM입니다.Python-Kafka : 스크립트 모드가 아닌 대화 형 모드로 실행되는 프로그램

코드 : 나는

파이썬 sampl.py

로 위의 코드를 실행하면 sampl.py

from kafka import KafkaProducer 
Producer = KafkaProducer(bootstrap_servers=['Machine_2:9092']) 
Producer.send('test', 'hello') 

Machine_2에 도달 할 메시지가 없습니다. 내가 할 경우 :

파이썬 -i sampl.py

을 그런 다음 메시지는 Machine_2에 도달한다. 나는 kafka-console-consumer.sh을 사용하여 같은 것을 검사했다. 나는 yum updateMachine_1에 넣었습니다. 여기에 누락 된 라이브러리가있을 수 있습니다. 그러나 운은 아직 없다.

감사합니다.

+0

당신은 무엇 카프카 - 파이썬과 카프카 브로커의 버전을 사용하는 ? –

+0

늦게 답장을 드려 죄송합니다. 카프카 버전 - -0.10.2.0, 파이썬 카프카 모듈 - kafka_python-1.3.5. – wonder

답변

0

여기에 kafka-python 관리자가 있습니다. Producer.send('test', b'hello')은 비동기식이며 즉시 배달되지 않습니다. 당신이보기에는 파이썬 인터프리터가 생산자가 네트워크 보내기를 완료하기 전에 종료되고 있다는 것을 알 수 있습니다.

스크립트를 완료하기 전에 메시지가 전송 될 때까지 기다리려면 .get (timeout = ...)을 사용해야합니다. 그래서 시도 :

Producer.send('test', b'hello').get(timeout=1000)

또는 교대로, 당신은 호출 할 수 있습니다 플러시() 모든 보내지 않은 메시지에 대해 동일한 작업을 수행합니다 :

Producer.flush(timeout=1000)

+0

생산자가 메시지를 보내는 기본주기 간격은 무엇입니까? 타임 아웃 기간 내에 전송하지 않으면 어떻게됩니까? – wonder

+0

kafka-python은주기적인 간격을 사용하지 않습니다. 데이터를 내부적으로 버퍼링하여 처리량을 높이기 위해 더 큰 배치를 만들 수 있지만 기본적으로 비활성화되어 있습니다. 자세한 내용은 다음 문서를 참조하십시오. http://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html – dpkp