【发布时间】:2017-12-29 04:05:25
【问题描述】:
我有多个具有相同 group.id 的消费者都在监听特定主题。主题有一个分区。
据我了解,来自同一消费者组(由相同的 group.id 标识)的消费者将以循环方式获取消息,这样消息仅由单个消费者处理。消费者在不同机器上的不同 Windows 服务中运行。
消费者是用 C# 编写并基于Confluent's Apache Kafka .NET client。
配置如下:
var config = new Dictionary<string, object>
{
{"group.id", "MyConsumerGroupId"},
{"enable.auto.commit", true},
{"auto.commit.interval.ms", 5000},
{"log.connection.close", false},
{"session.timeout.ms", 30000},
{"heartbeat.interval.ms", 5000},
{"queued.min.messages", 1000},
{"partition.assignment.strategy", "roundrobin"},
{"bootstrap.servers", _kafkaCluster},
{
"default.topic.config", new Dictionary<string, object>
{
{"auto.offset.reset", "largest"}
}
}
};
但是,我确实体验到所有消费者都会收到相同的消息。我从消费者那里记录了有关收到的消息的信息,在这里我看到多个具有相同消息、主题、偏移量和分区的日志条目。
这是预期的行为吗?
【问题讨论】:
-
实际上,如果所有消费者都属于同一个 groupid,您会收到相同的消息,这很奇怪。但是,当您说:“消费者在不同机器上的不同 Windows 服务中运行。”这到底是什么意思?
标签: c# apache-kafka kafka-consumer-api