Node.js 诺德斯和卡夫卡关键的分裂者
我试图在4分区主题上使用kafka Highlevelproducer的键控分区 我的代码如下:Node.js 诺德斯和卡夫卡关键的分裂者,node.js,apache-kafka,partitioning,Node.js,Apache Kafka,Partitioning,我试图在4分区主题上使用kafka Highlevelproducer的键控分区 我的代码如下: var kafka = require('kafka-node'), HighLevelProducer = kafka.HighLevelProducer, client = new kafka.Client(Host+":"+Port,client_id), producer = new HighLevelProducer(client,{partiti
var kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(Host+":"+Port,client_id),
producer = new HighLevelProducer(client,{partitionerType: 3});
.
.
theKey = theKey+1;
if ( theKey > Nb_key ) {
theKey = 0;
}
var payloads = [
{ topic: Topic, key: theKey, messages: JSON.stringify({"hello": "world", "Timestamp": +timestamp}) }
];
producer.send(payloads, function (err, data) {
});
var MyPartitioner = function (partitions, key) {
key = key || '0';
var index = parseInt(key) % partitions.length;
return partitions[index];
};
var kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(Host+":"+Port,client_id),
producer = new HighLevelProducer(client,{requireAcks: 0,partitionerType: 4},MyPartitioner );
producer.on('ready', function () {
timer.setInterval(send_data, '',SendIntervalInUsecs+'u');
});
我检查了消息是否具有正确的键值,但仍然将所有消息发送到分区1。
你觉得我做的有什么不对吗
谢谢查看代码,我想我理解了这个问题。 baseProducer将密钥作为字符串进行散列,结果总是相同的,因此总是相同的分区。 我编写了自己的自定义分区器,使用nb分区对键进行简单的模运算,它工作得非常完美。 见下面的代码:
var kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(Host+":"+Port,client_id),
producer = new HighLevelProducer(client,{partitionerType: 3});
.
.
theKey = theKey+1;
if ( theKey > Nb_key ) {
theKey = 0;
}
var payloads = [
{ topic: Topic, key: theKey, messages: JSON.stringify({"hello": "world", "Timestamp": +timestamp}) }
];
producer.send(payloads, function (err, data) {
});
var MyPartitioner = function (partitions, key) {
key = key || '0';
var index = parseInt(key) % partitions.length;
return partitions[index];
};
var kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(Host+":"+Port,client_id),
producer = new HighLevelProducer(client,{requireAcks: 0,partitionerType: 4},MyPartitioner );
producer.on('ready', function () {
timer.setInterval(send_data, '',SendIntervalInUsecs+'u');
});
看看代码,我想我理解了这个问题。 baseProducer将密钥作为字符串进行散列,结果总是相同的,因此总是相同的分区。 我编写了自己的自定义分区器,使用nb分区对键进行简单的模运算,它工作得非常完美。 见下面的代码:
var kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(Host+":"+Port,client_id),
producer = new HighLevelProducer(client,{partitionerType: 3});
.
.
theKey = theKey+1;
if ( theKey > Nb_key ) {
theKey = 0;
}
var payloads = [
{ topic: Topic, key: theKey, messages: JSON.stringify({"hello": "world", "Timestamp": +timestamp}) }
];
producer.send(payloads, function (err, data) {
});
var MyPartitioner = function (partitions, key) {
key = key || '0';
var index = parseInt(key) % partitions.length;
return partitions[index];
};
var kafka = require('kafka-node'),
HighLevelProducer = kafka.HighLevelProducer,
client = new kafka.Client(Host+":"+Port,client_id),
producer = new HighLevelProducer(client,{requireAcks: 0,partitionerType: 4},MyPartitioner );
producer.on('ready', function () {
timer.setInterval(send_data, '',SendIntervalInUsecs+'u');
});