Apache kafka 数据是否跨分区分割?

Apache kafka 数据是否跨分区分割?,apache-kafka,Apache Kafka,我读过卡夫卡文档,但当有人谈论数据和分区时,我仍然感到困惑。 在文档中,我看到客户机将向分区发送消息。 然后将消息分区复制到副本(跨代理)。 和使用者从分区读取数据 我有一个有两个分区的主题。 假设我有一个生产者,它向分区#1发送消息。 但我有两个消费者,一个从分区1读取,另一个从分区2读取。 这是否意味着我的分区1将有50%的消息,分区2将有50%的消息。或者,当客户端将数据发送到分区#1时,分区#1应该不仅跨代理复制数据,而且跨分区复制数据 关于你的具体例子 如果您的生产者发送消息时消息上没

我读过卡夫卡文档,但当有人谈论数据和分区时,我仍然感到困惑。 在文档中,我看到客户机将向分区发送消息。 然后将消息分区复制到副本(跨代理)。 和使用者从分区读取数据

我有一个有两个分区的主题。 假设我有一个生产者,它向分区#1发送消息。 但我有两个消费者,一个从分区1读取,另一个从分区2读取。
这是否意味着我的分区1将有50%的消息,分区2将有50%的消息。或者,当客户端将数据发送到分区#1时,分区#1应该不仅跨代理复制数据,而且跨分区复制数据

关于你的具体例子

如果您的生产者发送消息时消息上没有键,则默认的分区器(在生产者本身中)将应用循环算法将消息发送到分区so:消息1到分区1,消息2到分区2,消息3到分区1,依此类推。这意味着您是对的,分区1将获得50%的消息。因此,从分区1读取的一个消费者将获得50%的已发送消息;另外50%将由另一个使用者从分区2读取。这就是卡夫卡如何获得更高的吞吐量和处理更多的消费者。 需要补充的是,当一个分区有更多副本时,其中一个副本被定义为“leader”,另一个副本被定义为“followers”。信息交换总是通过“领导者”进行的。“追随者”只是复制品。它们用于承载“leader”分区的代理崩溃,而承载“follower”分区的另一个代理被选为“leader”


我希望这会有所帮助。

消费者并不总是从领导者那里得到好处-这在最新的2.3中是相当新的,不会改变我答案的性质。准确地说,2.3只是在客户端实现协议,而代理端还没有发布,它应该在2.4上,这意味着分区计数=消费者计数,否则我们不能处理所有消息,对吗?这意味着当消费者属于同一消费者组时,分区计数=Max(消费者计数)。在您的示例中,您不能有3个使用者,因为其中一个将处于空闲状态,但您可以只有一个使用者,例如,它将从两个分区获取消息。