Kafka使用者在多区域AWS中重复读取相同的消息

时间:2018-09-21 18:42:05

标签: node.js amazon-web-services apache-kafka distributed-computing kafka-consumer-api

我正在构建一个事件传播应用程序,该应用程序分布在3个AWS位置。 每个站点中的应用程序都连接到2个kafka实例(位于一个EC2中),并根据应用程序的行为将其写入(产生)到一个队列中,或从另一个队列中读取(消耗)。

该应用程序是使用NodeJS构建的,并使用kafka-node库(https://www.npmjs.com/package/kafka-node)。

问题在于,使用者读取了消息,并假定将其提交,但是一旦读取了所有消息,使用者就从头开始。除此之外,即使我从不产生空消息,偏移量= 0的消息始终为空。

令人惊讶的是,这仅在将其部署在不同位置时才会发生。在我的本地主机设置中可以完美运行。

下面是我的消费者的摘录:

function consumeKafkaMessages() {
  const client = new kafka.KafkaClient({kafkaHost: process.env.KAFKA_CONSUMER_HOSTNAME});

  const consumer = new kafka.Consumer(
    client,
    [{ topic: config.KAFKA_TOPIC }],
    { autoCommit: true }
  );

  consumer.on('message', async function(message) {
    console.log("===============\n");
    console.log("Consumed operation from kafka => " + JSON.stringify(message));
    console.log("===============\n");
    let parsedMessage;

    let failed = false;
    try {
      parsedMessage = JSON.parse(message.value);  
    } catch (error) {
      failed = true;
    }

    if (!failed) {
      // application logic, not important
    }
  });

有什么主意吗?

欢迎所有帮助:-)

0 个答案:

没有答案