【问题标题】:Can't send Kafka messages though topic and producer both exist尽管主题和生产者都存在,但无法发送 Kafka 消息
【发布时间】:2021-08-17 16:29:14
【问题描述】:

我在 TypeScript 中使用本地的 KafkaJS 库,使用单个 kafka 代理。我已成功连接生产者,已验证我的主题已创建,并且正在生成消息:


  const changeMessage = {
    key: id,
    value: JSON.stringify(person),
    headers: {
      changeType: status,
    },
  };

现在当我去发送消息时:


  try {
    const sendResponse = await producer.send({
      topic: topicName2,
      messages: [changeMessage],
    });
    log.responseFragment(
      { id, topicName2 },
      `Sending changed/added person ${id} to topic ${topicName2}`
    );
  } catch (error) {
    log.error(
    { error }, `Could not send personChangedAdded ${id} to topic ${topicName2}`
    );
  }

这是我返回的错误:

Could not send personChange to topic topicName2
    error: {
      "name": "KafkaJSError",
      "retriable": true
    }

【问题讨论】:

  • 除了您的自定义消息(与代码不匹配)之外,您是否可以获得错误中的更多详细信息?代理日志是否显示任何有用的信息?
  • 错误与那段代码不匹配。即personChangedAdded 显示在带有 id 的错误处理程序中,但错误显示的内容完全不同。
  • @OneCricketeer 从侦听器的代理内部,我在获取分区 topicName2-0 (org.apache.kafka.clients.consumer.internals.Fetcher) 时收到未知主题或分区错误从日志中它是 [2021-08-17 16:02:15,753] TRACE [Controller id=1 epoch=1] Received response StopReplicaResponseData(errorCode=0, partitionErrors=[StopReplicaPartitionError(topicName='IndividualEvents', partitionIndex=0, errorCode=0), StopReplicaPartition
  • 带有topicName='IndividualEvents' 的日志与您的代码无关,除非这实际上是您的主题名称。请显示您在哪里设置topicName2的值
  • 感谢@OneCricketeer,原来问题出在log.responseFragment 位,当我们将其更正为log.info 时,它工作得很好。

标签: javascript typescript apache-kafka kafkajs


【解决方案1】:

我未能定义log.responseFragment(),当我将其更改为简单的log.info() 时,问题已解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2020-08-31
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多