分区

vmpqdwk3  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(233)

我已经在kafka上工作了六个月了,我对用户延迟和存储到主题分区中的数据有一些疑问。
问题1:最初,当我开始阅读关于Kafka的书籍,了解如何使用它的功能时,我被灌输了这样一个理念:一个只有一个部分和一个复制因子的主题会产生奇迹。经过相当长的六个月的工作,移动我的项目,以生活的消费者,消费我的消息从主题开始给我一个滞后。我阅读了许多有关consumer lag的堆栈溢出的答案,得出了这样一个结论:如果我为某个主题增加分区和复制因子,就会删除它。我真正想知道的是,在六个月的数据流向某个主题之后,这真的能消除我的消费者滞后吗?有人能帮我消除我经纪人的滞后吗。提前谢谢。
问题2:例如,如果我为一个主题增加部分和复制因子,那么从现在开始,我的生产者将如何将数据放到主题中,在它是一个分区之前,数据将淹没相同的分区,并且我的使用者组只有一个使用者,这是默认的,将只从一个分区获取。我的数据将分布在topic的分区中(即第一条消息在一个分区中,下一条消息在另一个分区中)。还有一件事,我会要求在消费者方面的任何变化也像许多消费者一样,我必须开始从主题中读取数据,以便为我遵循顺序(即,我必须按照我发布到主题的顺序获取数据。。。
如果有人能对我面临的两个问题给出一个明确的解决方案,那就好了。提前谢谢。

nhaq1z21

nhaq1z211#

如果你的消费者有滞后,你产生(推)到主题的速度比你阅读的速度快。增加分区数有助于并行运行多个使用者。例如,如果您有16个分区和4个使用者(具有相同的组id),那么每个使用者将读取4个分区。这减少了应由一个消费者处理的数据量(最好是4次)。
将消息推送到Kafka时,可以指定密钥。基于这个密钥,kafka消费者决定消息应该发送到哪个分区。

return Utils.abs(Utils.murmur2(record.key())) % numPartitions;

如果不指定键,消息将均匀分布在所有分区中。因此,如果您需要有顺序(例如每个用户),您可以将key设置为用户id。在这种情况下,一个用户的所有消息将始终位于一个分区中,并按您推送它们的顺序排列。

相关问题