Apache kafka 无法通过多个使用者从具有单个分区的单个主题读取事件

Apache kafka 无法通过多个使用者从具有单个分区的单个主题读取事件,apache-kafka,Apache Kafka,我是卡夫卡的新手,使用卡夫卡节点。我用卡夫卡进行实时数据处理。 该系统有一个生产者和多个消费者。如果一次运行任何一个消费者,我都可以接收数据,但是如果我运行两个消费者,只有其中一个会接收数据,而另一个消费者不会接收数据 卡夫卡制作人的代码为: const config = require('../config'); const logger = require('./logger'); const kafka = require('kafka-node'), HighLevelProducer

我是卡夫卡的新手,使用卡夫卡节点。我用卡夫卡进行实时数据处理。 该系统有一个生产者和多个消费者。如果一次运行任何一个消费者,我都可以接收数据,但是如果我运行两个消费者,只有其中一个会接收数据,而另一个消费者不会接收数据

卡夫卡制作人的代码为:

const config = require('../config');
const logger = require('./logger');
const kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(`${config.kafka.host}:${config.kafka.port}`),
producer = new HighLevelProducer(client);

producer.on('ready', () => {
logger.info("Events producer to kafka is ready...");
});

producer.on('error', (err) => {
logger.error("Error while starting kafka producer:" + err.message);
});

const queueEvent = (event, callback) => {
const payloads = [
{ topic: config.kafka.queueName, messages: JSON.stringify(event, null, 
2) },
];
producer.send(payloads, (err, data) => {
if (err) {
logger.error(`Error while producing data: ${err.message}`);
callback(err);
} else {
callback(null, data);
}
});
};

module.exports = {
queueEvent
};
为所有使用者完成的配置如下所示:

const kafka = require('kafka-node');

const logger = require('../common/logger');
const config = require('../common/config');
const eventDao = require('../models/event');
const _ = require('lodash');

const { getDeviceHierarchy } = require('../common/apiUtils');

const options = { autoCommit: true, fetchMaxWaitMs: 1000, fetchMaxBytes: 
1024 * 1024 };

const HighLevelConsumer = kafka.HighLevelConsumer,
client = new kafka.Client(`${config.kafka.host}:${config.kafka.port}`),
consumer = new HighLevelConsumer(
client,
[
{ topic: config.kafka.queueName, partition: 0 }
],
options
);
我正在使用卡夫卡的docker图像,下面是我所做的设置

docker run-d-p 2181:2181-p 3030:3030-p 8081-8083:8081-8083-p 9581-9585:9581-9585-p 9092:9092-e ADV_HOST=localhost-e DISABLE=azure documentdb、区块链、bloomberg、cassandra、coap、druid、elastic、elastic 5、ftp、hazelcast、hbase、InfrifB、jms、kudu、mongodb、mqtt、redis、Reinsit、voltdb、yahoo、hdfs、jdbc、elasticsearch、s3、,twitter-e CONNECT_HEAP=6G-e RUNNING_SAMPLEDATA=0-e RUNTESTS=0 landoop/fast数据开发:最新**


请确认多个消费者场景中的消费者是否属于同一消费者组

如果确实如此,则观察到的行为是正确的。让我试着详细说明一下:

  • 在您描述的场景中,听起来两个消费者都属于同一个消费者组。在这种情况下,组中的每个使用者只能使用一个分区。因为我们这里只有一个分区,所以第一个消费者会使用它

  • 如果我们有多个消费者组,每个组中有多个消费者订阅同一主题(使用一个分区)。在这种情况下,多个使用者可以使用同一分区

  • 我不熟悉您使用的编程语言,但在Kafka consumer中找不到设置“
    group.id
    ”属性的语句。请尝试在您的消费者代码/配置中设置此选项好吗


    另外,您是否可以检查并确认您正在使用的卡夫卡版本,以及卡夫卡中的
    consumer.properties
    文件中是否有默认值?因为从版本0.9.0.0开始,group.id属性值被设置为强制值,如果不提供该属性值,则会引发错误(请选中此项)

    谢谢。消费者属于同一消费群体。创建不同的消费群体解决了这个问题。但现在我面临另一个问题:@monika-Ok。如果这个问题解决了。你能承认/接受这个答案吗?:)(您也会从确认中受益:))然后为其他问题发布新问题,并提供指向该问题的链接?然后,我将尝试重现这些新问题并进行检查。