2017-09-11 67 views
0

我試圖用鍵入分區卡夫卡Highlevelproducer,在4個分區的話題 我有下面的代碼:的NodeJS和卡夫卡鍵分區

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) { 
     }); 

我檢查了消息具有正確的密鑰值,但仍,所有的消息都發送到分區1. 你看到什麼毛病我在做什麼?

謝謝

回答

1

看着代碼,我想我明白了這個問題。 的baseProducer正在做的關鍵是一個字符串的哈希,結果總是相同的,所以總是相同的分區。 我寫我自己的自定義分區,這樣做與分區的NB關鍵一個簡單的模數,它完美的作品。下面 見代碼:

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'); 
    });