Как отправить данные в несколько тематических разделов Kafka в Node JS - PullRequest
0 голосов
/ 18 февраля 2019

В приложении Node js, когда я пытаюсь отправить сообщения на тему Kafka, все собираются в Раздел 0. Тема была создана с 4 разделами и хочу публиковать в циклическом механизме, я попробовал несколько вариантов, но безуспешно.

Есть ли способ решить эту проблему?Ниже приведен фрагмент кода.

payloads = [
    { topic: 'test-topic', messages: ['TestMessage1', 'TestMessage2', 'TestMessage3', 'TestMessage4']},
];
producer.on('ready', function(){
    producer.send(payloads, function(err, data){
        console.log("Successfully written onto Kafka");
    });

1 Ответ

0 голосов
/ 19 февраля 2019

В Kafka сообщения с одинаковым ключом помещаются в один и тот же раздел.Вы можете определить раздел вручную:

// Force partitioning - default partition is 0
payloads = [ 
    { topic: 'test-topic', messages: ['TestMessage1'], partition: 0 },
    { topic: 'test-topic', messages: ['TestMessage2'], partition: 1 },
    { topic: 'test-topic', messages: ['TestMessage3'], partition: 2 },
    { topic: 'test-topic', messages: ['TestMessage4'], partition: 3 }
];

или использовать разные ключи для каждого сообщения:

payloads = [ 
    { topic: 'test-topic', messages: ['TestMessage1'], key: '1' },
    { topic: 'test-topic', messages: ['TestMessage2'], key: '2' },
    { topic: 'test-topic', messages: ['TestMessage3'], key: '3' },
    { topic: 'test-topic', messages: ['TestMessage4'], key: '4' }
];

// Alternatively, you can use KeyedMessage
km = new KeyedMessage('1', 'TestMessage1'),
km2 = new KeyedMessage('2', 'TestMessage2'),
payloads = [
    { topic: 'test-topic', messages: [ km , km2 ] },
];
...