【问题标题】:How to throw custom error for KafkaJS client when initialization fails?初始化失败时如何为KafkaJS客户端抛出自定义错误?
【发布时间】:2022-11-09 16:43:49
【问题描述】:

我正在使用以下代码来初始化 Kafka 客户端:

this.kafka = new Kafka({
  clientId: <my_client_ID>,
  brokers: [
    `${process.env.KAFKA_BROKER_1}`,
    `${process.env.KAFKA_BROKER_2}`,
    `${process.env.KAFKA_BROKER_3}`,
  ],
  retry: {
    initialRetryTime: 3000,
    retries: 3,
  },

});

现在,如果连接代理出现问题,它将引发如下错误:

{"level":"ERROR","timestamp":"2022-10-19T04:21:08.143Z","logger":"kafkajs","message":"[Connection] Connection timeout","broker":"<broker_1>","clientId":"<my_client_id"}
{"level":"ERROR","timestamp":"2022-10-19T04:21:08.144Z","logger":"kafkajs","message":"[BrokerPool] Failed to connect to seed broker, trying another broker from the list: Connection timeout","retryCount":0,"retryTime":299}
{"level":"ERROR","timestamp":"2022-10-19T04:21:08.143Z","logger":"kafkajs","message":"[Connection] Connection timeout","broker":"<broker_2>","clientId":"<my_client_id"}
{"level":"ERROR","timestamp":"2022-10-19T04:21:09.447Z","logger":"kafkajs","message":"[BrokerPool] Failed to connect to seed broker, trying another broker from the list: Connection timeout","retryCount":1,"retryTime":564}
{"level":"ERROR","timestamp":"2022-10-19T04:21:08.143Z","logger":"kafkajs","message":"[Connection] Connection timeout","broker":"<broker_3>","clientId":"<my_client_id"}
{"level":"ERROR","timestamp":"2022-10-19T04:21:11.014Z","logger":"kafkajs","message":"[BrokerPool] Failed to connect to seed broker, trying another broker from the list: Connection timeout","retryCount":2,"retryTime":1008}

现在,我想在此处更改日志消息或在发生这种情况后添加自定义消息。我正在考虑将它包装在一个 try-catch 块中,但由于某种原因它没有抛出异常。所以:

  1. 有没有办法将此开箱即用的日志更改为自定义日志?
  2. 如果 Kafka 客户端无法初始化,如果 (1) 不可能,我如何添加自定义 long?

    谢谢。

【问题讨论】:

    标签: javascript node.js apache-kafka kafkajs


    【解决方案1】:

    据我了解,您想添加自定义日志来处理某些错误场景。

    Kafkajs 提供了一种创建我们自己的自定义日志并使用它们而不是默认日志的方法。

    here 是相同的参考。您可以检查您的 kafkajs 版本以避免兼容性问题。在下面添加了一个示例。

    {
        level: 4,
        label: 'INFO', // NOTHING, ERROR, WARN, INFO, or DEBUG
        timestamp: '2017-12-29T13:39:54.575Z',
        logger: 'kafkajs',
        message: 'Started',
        // ... any other extra key provided to the log function
    }
    
    <!-- begin snippet: js hide: false console: true babel: false -->

    const kafka = new Kafka({
        clientId: 'my-app',
        brokers: ['kafka1:9092', 'kafka2:9092'],
        logLevel: logLevel.ERROR,
        logCreator: WinstonLogCreator
    })

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-05
      • 2013-04-01
      • 2016-02-11
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多