[英]confluent-kafka consumer working but not producer
使用 confluent-kafka,我正在嘗試使用 Amazon MSK。 它似乎連接到 MSK,因為消費者正在工作,但生產者沒有生產任何東西。 我檢查了 kafka-console-producer.sh 消費者模塊是否正常工作。 我們有幾個使用 MSK 的后端。 這是我在開發我的服務時提到的 Spring 引導(我們的其他服務)配置。
spring.kafka.properties.security.protocol=SASL_SSL
spring.kafka.properties.sasl.mechanism=SCRAM-SHA-512
spring.kafka.properties.sasl.jaas.config=\
org.apache.kafka.common.security.scram.ScramLoginModule \
required username={username} password={password};
當然,{username} 和 {password} 替換為我們的
我的服務的配置如下
kafka:
bootstrap_servers: {Our MSK End Point}
security_protocol: SASL_SSL
sasl_mechanism: SCRAM-SHA-512
sasl_username: {username}
sasl_password: {password}
consumer:
session_timeout_ms: 6000
auto_offset_reset: earliest
內部生產者 controller
conf = {
'bootstrap.servers': appcfg.kafka.bootstrap_servers,
'security.protocol': appcfg.kafka.security_protocol,
'sasl.mechanism': appcfg.kafka.sasl_mechanism,
'sasl.username': appcfg.kafka.sasl_username,
'sasl.password': appcfg.kafka.sasl_password
}
內部消費 Controller
conf = {
'bootstrap.servers': appcfg.kafka.bootstrap_servers,
'security.protocol': appcfg.kafka.security_protocol,
'group.id': group_id,
'sasl.mechanism': appcfg.kafka.sasl_mechanism,
'sasl.username': appcfg.kafka.sasl_username,
'sasl.password': appcfg.kafka.sasl_password,
'session.timeout.ms': appcfg.kafka.consumer.session_timeout_ms,
'auto.offset.reset': appcfg.kafka.consumer.auto_offset_reset
}
在我的 ec2 實例中,它沒有顯示 Producer 的任何錯誤。 它沒有任何反應
產生未出現在日志上的回調
def delivery_callback(err, msg):
if err:
log_manager.kafka.error('Message delivery failed: {}'.format(err))
else:
log_manager.kafka.info('Message delivered to {} [{}]'.format(msg.topic(), msg.partition()))
在生產者
for line in sys.stdin:
try:
producer.produce(topic, line.rstrip(), callback=delivery_callback)
except BufferError:
log_manager.kafka.error('%% Local producer queue is full (%d messages '
'awaiting delivery): try again\n' % len(producer))
except KafkaException as e:
log_manager.kafka.error(traceback.format_exc(e))
except BaseException as e:
log_manager.kafka.error(traceback.format_exc(e))
producer.poll(0)
在消費者
try:
while True:
msg = consumer.poll(timeout=1.0)
if msg is None:
continue
if msg.error():
raise KafkaException(msg.error())
else:
print('%% %s [%d] at offset %d with key %s:\n' %
(msg.topic(), msg.partition(), msg.offset(),
str(msg.key())))
print(msg.value())
上面的示例代碼只是標准輸入產生味精,消費者正在接收它。
任何幫助表示贊賞!
我終於弄清楚了我的生產者配置有什么問題。
我需要將 'acks': '1' 添加到我的生產者配置中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.