【问题标题】:offset of partition 0 is very close to be the sum of offset from rest partitions分区 0 的偏移量非常接近于与其余分区的偏移量之和
【发布时间】:2019-05-18 03:54:08
【问题描述】:

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

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

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

【问题讨论】:

  • 因为p[0] 可能有海量数据,并且取决于消息的键
  • 对不起,我不明白你的意思。你能为我提供更多的关键字来喂谷歌吗?谢谢。

标签: apache-kafka


【解决方案1】:

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

这可以使用partitioner.class 设置进行配置。如果您没有更改它,那么 default partitioner 的工作方式如下:

  • 如果记录中指定了分区,则使用它
  • 如果未指定分区但存在键,则根据键的哈希选择分区
  • 如果不存在分区或键,则以循环方式选择分区

所以看起来您的密钥不是均匀分布的。要么您有几个不同的键,要么有更多具有特定键的记录。键通常用于确保具有相同键的记录被发送到相同的分区(从而保持有序)。

稍微偏向分区不一定是坏事,这主要取决于您的用例。如果您认为数据可以更好地分区,您可以实现自己的分区器。

【讨论】:

    【解决方案2】:

    The Producer

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

    客户端控制它将消息发布到哪个分区。这可以随机完成,实现一种随机负载均衡,也可以通过一些语义划分函数来完成。我们通过允许用户指定要分区的键并使用它来散列到分区来公开语义分区的接口(如果需要,还可以选择覆盖分区函数)。 例如,如果选择的键是用户 ID,那么给定用户的所有数据都将发送到同一个分区。这反过来将允许消费者对其消费进行位置假设。这种分区风格明确设计为允许消费者进行局部敏感处理。

    【讨论】:

      猜你喜欢
      • 2021-02-22
      • 1970-01-01
      • 2019-11-25
      • 2013-09-29
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多