我已经在kafka上工作了六个月了,我有一些关于消费者延迟和存储到主题中分区的数据的问题。
问题1:最初,当我开始阅读kafka并了解其功能如何使用时,我被反复传授一个包含一个部分和一个复制因子的主题将会带来奇迹。在整整六个月的工作之后,将我的项目转移到生活中的消费者,从主题消费我的消息开始给我一个滞后。我阅读了许多关于消费者延迟的堆栈溢出答案,并得出结论:如果我增加主题的分区和复制因子,就会删除它。我真正想知道的是,在六个月的数据流向某个主题后,这是否真的能消除我的消费者滞后,有人能帮助我在我的经纪人中消除这种滞后吗?提前谢谢。
问题2:举个例子,如果我增加了主题的部分和复制因子,那么从现在开始,我的生产者将如何将数据放到主题中,在它是一个分区之前,数据将会泛滥,而我的消费者组只有一个消费者,这是默认的,只会从一个分区中获取。我的数据是否会分布在主题的分区中(即,第一条消息在一个部分中,下一条消息在另一个分区中。还有一件事,我需要消费者方面的任何改变也像许多消费者一样,我必须开始从主题读取数据,以便为我遵循顺序(即)我必须以我发布到主题的顺序获得我的数据……
如果有人能对我面临的这两个问题都给出一个明确的解决方案,那就太好了。提前谢谢。
发布于 2017-08-30 15:30:01
如果你的消费者有延迟,那么你产生(推送)到主题的速度比你阅读的速度要快。增加分区数量可以帮助您并行运行多个使用者。例如,如果您有16个分区和4个消费者(具有相同的组id),那么每个消费者将读取4个分区。减少了应该由一个客户处理的数据量(在最好的情况下是4次)。
向kafka推送消息时,可以指定key。基于该键,kafka消费者决定消息应该发送到哪个分区。
return Utils.abs(Utils.murmur2(record.key())) % numPartitions;
如果不指定key,消息将均匀分布在所有分区中。因此,如果您需要拥有order (例如每个用户),您可以将key设置为用户id。在这种情况下,一个用户的所有消息都将始终位于一个分区中,并按您推送它们的顺序排列。
https://stackoverflow.com/questions/45951994
复制相似问题