kafka A

kafka是linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点击)以及系统运行日志(CPU、内存、磁盘、网络、系统、进程状态)。

当前很多的消息队列服务提供可靠交付保证,并默认是即时消费(不适合离线)。高可靠交付对linkedin的日志不是必须的,故可通过降低可靠性来提高性能,同时通过构建分布式的集群,允许消息在系统中累计,使得kafka同时支持离线和在线日志处理。


publisher ------ 发布者

producer ------ 生产者

subscriber ---- 订阅者

consumer ----- 消费者


kafka的架构如下图所示。

kafka A_第1张图片

kafka存储策略

1、kafka以topic来进行消息管理,每个topic包含多个part(ition),每个part对应一个逻辑log,有多个segment组成。

2、每个segment中存储多条消息(见下图),消息id由逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。

3、每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。

4、发布者发到某个topic的消息会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行发布),broker收到发布消息往对应part的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。



你可能感兴趣的:(消息流)