【发布时间】:2017-05-03 15:31:14
【问题描述】:
我很难把握分区和客户群背后的关系。
这些想法本身就很清楚,推送到主题的每条消息都会复制到它的所有分区,对吧? 这样,如果两个不同的客户端连接到同一主题的两个不同分区,那么它们应该消费并提交相同的消息,而不会相互中断。
据我所知,消费者组是对分区概念的抽象,它们本质上承诺相同的事情,连接到同一主题的两个不同消费者组的两个不同客户端应该消费并提交相同的消息而不会相互中断.
因此,正如我所看到的,应该遵循连接到同一消费者组的两个客户端将使用来自同一分区的消息,而连接到两个不同消费者组的两个客户端将使用来自两个不同分区的消息(假设有该主题至少有两个分区),否则消费者组的想法不符合分区的想法。
但是,当我在 C# 中运行一个简单的消费者客户端时
string group = Console.ReadLine();
var config = new Dictionary<string, object>()
{
{ "group.id", group },
{ "bootstrap.servers", "10.0.0.3:9092" },
{ "enable.auto.commit", true },
{ "auto.commit.interval.ms", 1000 }
};
using (var consumer = new Consumer<Null, string>(config, null, new StringDeserializer(Encoding.UTF8)))
{
consumer.Subscribe(new List<string>() { { "myFirstTopic" } });
while (true)
{
Message<Null, string> msg;
if (!consumer.Consume(out msg, TimeSpan.FromMilliseconds(100)))
{
continue;
}
Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset: {msg.Offset} {msg.Value}");
}
}
我得到这个结果:
同一个消费者组从 2 个不同的分区消费。 当我运行来自不同消费者组(a 和 b)的两个客户端时,我得到了这个:
两个不同的消费者群体从相似的分区消费。
我不明白这是怎么回事,是不是说消费者群体的想法和分区的想法是矛盾的?
如果同一个消息在同一个分区下的两个不同的消费者组中出现,是不是意味着同一个消息被插入了两次到同一个分区?
请帮助我理解。
【问题讨论】:
标签: c# apache-kafka