Apache kafka 卡夫卡的消费和生产批量问题

Apache kafka 卡夫卡的消费和生产批量问题,apache-kafka,kafkajs,Apache Kafka,Kafkajs,我想在Node.js项目中使用kafkajs。让我看看我的代码 制作人: const producer=kafka.producer(); 等待producer.connect(); const items=等待getItems();//以某种方式生产5000件物品 等待制作人({ 主题:“项目”, 消息:items.map(c=>({value:JSON.stringify(c)})), }); //即使我在这里拆分成这样的块,在consumer中,我也会得到超过100个项目的批处理 /* c

我想在Node.js项目中使用kafkajs。让我看看我的代码

制作人:

const producer=kafka.producer();
等待producer.connect();
const items=等待getItems();//以某种方式生产5000件物品
等待制作人({
主题:“项目”,
消息:items.map(c=>({value:JSON.stringify(c)})),
});
//即使我在这里拆分成这样的块,在consumer中,我也会得到超过100个项目的批处理
/*
const chunked=uu.chunk(项目,100);
for(var chunk of chunked){
等待制作人({
主题:config.kafka.topics.tm.itemsToParse,
消息:chunk.map(c=>({value:JSON.stringify(c)})),
标题:{from:“csv_解析器”},
});
}
*/
消费者:

const consumer=kafka.consumer({groupId:“groupId”});
等待消费者。连接();
等待消费者。订阅({topic:“items”});
等待消费者。运行({
eachBatch:async({batch,resolvefoffset,heartbeat,isRunning})=>{
for(块的块(batch.messages,100)){
如果(!isRunning())中断;
//我能处理100件物品
让items=chunk.map(m=>JSON.parse(m.value));
/*
以某种方式处理物品,最长30秒
*/
for(块的消息)resolveOffset(message.offset);//取自kafkajs文档中的示例
等待心跳();
}
},
});
一个实例可以处理100个项目(最多)。所以现在,如果一个消费者拿走了这批5千件商品,其他人也不会拿走(从同一个groupId,并行处理)。问题是:

  • 将批同时从多个消费者处读取是真的吗
  • 我是否可以将使用者配置为批量使用已定义的邮件数
  • 生产商是否应发送具有正确批量大小的批次(按100项)?=>生产者必须适应消费者
  • 如果我需要定义的批次大小,如何正确地从生产商发送批次