分区0的偏移量非常接近其余分区的偏移量之和

时间:2019-05-17 19:01:10

标签: apache-kafka

我有一个由5个分区组成的主题,如下所示:

p[0] offset: 492453047
p[1] offset: 122642552
p[2] offset: 122641146
p[3] offset: 122636144
p[4] offset: 122638175

似乎分区的偏移量非常接近其余分区的偏移量之和。 我不知道如何以及为什么。

2 个答案:

答案 0 :(得分:2)

对于Kafka,生产者负责为每个记录分配一个分区。

这可以使用partitioner.class设置进​​行配置。如果您尚未更改,则default partitioner的工作方式如下:

  • 如果在记录中指定了分区,请使用它
  • 如果未指定分区但存在密钥,则根据密钥的哈希值选择一个分区
  • 如果没有分区或密钥,则以循环方式选择一个分区

因此,看起来您的密钥分布不均匀。您可能只有几个不同的键,或者具有特定键的记录要多得多。密钥通常用于确保具有相同密钥的记录被发送到相同的分区(并因此保持有序)。

对分区的一些偏斜不一定是坏事,这主要取决于您的用例。如果您认为可以更好地对数据进行分区,则可以实现自己的分区程序。

答案 1 :(得分:1)

The Producer

  

生产者将数据直接发送到作为分区领导者的代理,而无需任何中间路由层。为了帮助生产者做到这一点,所有Kafka节点都可以在任何给定时间回答关于元数据的请求,这些数据关于哪些服务器处于活动状态以及主题分区的领导者在哪里,以允许生产者适当地定向其请求。

     

客户端控制将消息发布到的分区。这可以随机执行,实现一种随机负载平衡,也可以通过某些语义分区功能来完成。我们通过允许用户指定要使用的键来进行分区并使用其散列到分区来公开语义分区的接口(如果需要,还可以选择覆盖分区功能)。 例如,如果选择的密钥是用户ID,则给定用户的所有数据将被发送到同一分区。这又将允许消费者对他们的消费进行本地化假设。明确设计了这种分区样式,以允许使用者进行本地敏感的处理。