Apache Kafka - 分区

时间:2017-08-30 04:36:35

标签: apache-kafka kafka-consumer-api spring-kafka

我已经在kafka上工作了六个月,我对一个主题中存储到分区的消费者滞后和数据有一些疑问。

问题1: 最初,当我开始阅读关于kafka并了解如何使用的功能时,我在旋转教导了一个部分和一个复制因素的主题会创造奇迹。经过相当长达六个月的工作,将我的项目转移到消费者身上,消费者从主题中消费我的消息开始给我一个滞后。我读了许多用于消费者滞后的堆栈溢出答案,并得出结论,如果我增加我的分区和主题的复制因子将删除它。我真正想知道的是,在这个主题有六个月的数据流量之后,这真的可以清除我的消费者滞后,有人可以帮助我消除我的经纪人的这种滞后。提前谢谢。

问题2: 对于一个实例,如果我增加了一个主题的部分和复制因子,那么从现在开始我的生产者如何将数据放到主题上,在它是一个分区之前,数据将泛滥相同而我的消费者组只有一个消费者,这是默认的,只从一个分区。将我的数据分配给主题的分区(即)一部分中的第一条消息和另一条分区中的下一条消息。还有一件事我需要消费者方面的任何变化,也像许多消费者一样,我必须开始从主题中读取数据,以便我遵循订单(即)我必须按照我发布到主题的顺序获取我的数据...

如果有人能够明确解决我面临的问题,那就很好。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的消费者有延迟,那么您生成(推送)主题的速度要比您阅读时快。增加分区数可帮助您并行运行多个使用者。例如,如果您有16个分区和4个使用者(具有相同的组ID),则每个使用者将读取4个分区。应该由一个消费者处理的数据量减少(最好的情况是4次)。

当您将消息推送到kafka时,您可以指定密钥。基于该密钥,kafka消费者决定应该使用哪些分区消息。

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

如果您未指定密钥,则消息将均匀分布在所有分区中。因此,如果您需要订购(例如,每个用户),您可以将密钥设置为用户ID。在这种情况下,一个用户的所有消息将始终位于一个分区中,并按照您推送它们的顺序。