我正在构建一个事件传播应用程序,该应用程序分布在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
}
});
有什么主意吗?
欢迎所有帮助:-)