簡體   English   中英

confluent-kafka 消費者工作但不是生產者

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM