我有一个由5个分区组成的主题,如下所示:
p[0] offset: 492453047 p[1] offset: 122642552 p[2] offset: 122641146 p[3] offset: 122636144 p[4] offset: 122638175
从分区的偏移量似乎非常接近于从其余分区的偏移量之和。我不知道怎么做,为什么。
w46czmvw1#
对于kafka,生产者负责为每个记录分配一个分区。可以使用 partitioner.class 设置。如果尚未更改,则默认分区器的工作方式如下:如果在记录中指定了分区,请使用它如果未指定分区,但存在密钥,请根据密钥的哈希值选择分区如果没有分区或密钥,则以循环方式选择分区所以看起来你的钥匙不是均匀分布的。您可能有几个不同的键,或者有更多的记录具有特定的键。密钥通常用于确保具有相同密钥的记录被发送到相同的分区(从而保持有序)。向分区倾斜一点并不一定是坏的,这主要取决于您的用例。如果您认为可以更好地对数据进行分区,那么可以实现自己的分区器。
partitioner.class
taor4pac2#
制作人生产者直接将数据发送到作为分区的领导者的代理,而不需要任何中间路由层。为了帮助生产者做到这一点,所有kafka节点都可以在任何给定的时间回答关于哪些服务器处于活动状态以及某个主题的分区的领导者在哪里的元数据请求,以允许生产者适当地引导其请求。客户机控制将消息发布到哪个分区。这可以随机完成,实现一种随机负载平衡,也可以通过一些语义划分函数来完成。我们公开了语义分区的接口,允许用户指定一个要分区的键,并使用该键散列到分区(如果需要,还可以选择重写分区函数)。例如,如果选择的键是用户id,那么给定用户的所有数据都将发送到同一分区。这反过来又会让消费者对自己的消费做出地域性假设。这种类型的分区是显式设计的,以允许在使用者中进行对位置敏感的处理。
2条答案
按热度按时间w46czmvw1#
对于kafka,生产者负责为每个记录分配一个分区。
可以使用
partitioner.class
设置。如果尚未更改,则默认分区器的工作方式如下:如果在记录中指定了分区,请使用它
如果未指定分区,但存在密钥,请根据密钥的哈希值选择分区
如果没有分区或密钥,则以循环方式选择分区
所以看起来你的钥匙不是均匀分布的。您可能有几个不同的键,或者有更多的记录具有特定的键。密钥通常用于确保具有相同密钥的记录被发送到相同的分区(从而保持有序)。
向分区倾斜一点并不一定是坏的,这主要取决于您的用例。如果您认为可以更好地对数据进行分区,那么可以实现自己的分区器。
taor4pac2#
制作人
生产者直接将数据发送到作为分区的领导者的代理,而不需要任何中间路由层。为了帮助生产者做到这一点,所有kafka节点都可以在任何给定的时间回答关于哪些服务器处于活动状态以及某个主题的分区的领导者在哪里的元数据请求,以允许生产者适当地引导其请求。
客户机控制将消息发布到哪个分区。这可以随机完成,实现一种随机负载平衡,也可以通过一些语义划分函数来完成。我们公开了语义分区的接口,允许用户指定一个要分区的键,并使用该键散列到分区(如果需要,还可以选择重写分区函数)。例如,如果选择的键是用户id,那么给定用户的所有数据都将发送到同一分区。这反过来又会让消费者对自己的消费做出地域性假设。这种类型的分区是显式设计的,以允许在使用者中进行对位置敏感的处理。