【发布时间】:2018-07-16 11:40:20
【问题描述】:
我想知道,在什么情况下,具有相同分区键的消息会进入不同的分区。
我使用下面给出的命令运行了属于同一组的两个消费者在控制台中监听一个主题:
sudo /etc/kafka/kafka_2.11-1.1.0/bin/kafka-console-consumer.sh --
bootstrap-server localhost:9092 --topic demo3 --consumer.config
config/consumer.properties --property print.key=true --property
key.separator=:
我使用“nmred/kafka-php”库将消息放入主题demo3,键为abc。当我发送多条此类消息时,我发现很少有消息会发送给第二个消费者,而大部分消息会发送给消费者 1。
由于我对所有消息使用相同的密钥abc,我希望所有消息都由同一个消费者使用。每个消费者都绑定到每个分区。
我使用以下代码来生成消息:
$config = \Kafka\ProducerConfig::getInstance();
$config->setMetadataRefreshIntervalMs(10000);
$config->setMetadataBrokerList('x.x.x.x:9092', 'y.y.y.y:9092');
$config->setRequiredAck(1);
$config->setIsAsyn(false);
$config->setProduceInterval(500);
$producer = new \Kafka\Producer(
function() {
return [
[
'topic' => 'demo3',
'value' => 'test message.',
'key' => 'abc',
],
];
}
);
$producer->success(function($result) {
var_dump($result);
});
$producer->error(function($errorCode) {
var_dump($errorCode);
});
$producer->send(true);
此屏幕截图清楚地显示了 3 条消息已发送给一位消费者,另一条则发送给另一位消费者
【问题讨论】:
标签: apache-kafka kafka-producer-api