kafka架构及各模块介绍

kafka是什么

    kafka是一个吞吐量分布式发布订阅消息系统。

kafka数据结构

    我们以关系型数据库为例子,toppic好比数据表,partition好比数据库分区,每个分区下面是每条消息(数据)。

kafka集群结构

    controller选举方法:谁先在zookeeper创建,谁就是controller;

    controller与follower区别:

        controller和follower都会监听zookeeper,controller出问题,follower会竞争controller;

        controller用于同步元数据,监听zookeeper中元数据变化,并获取controller中缓存,follower会从controller同步元数据,所以整个系统都存储了元数据;

    数据安全性实现:每个partition都有主和从,从用于同步数据保证数据安全,主用于读写,供消费者生产者使用;

    数据位置记录:生产offset、消费offset,生产者和消费者会对其offset进行操作

元数据如何管理?主从如何同步?offset如何维护?

      

kafka能力分析:

    kafka是高并发,高性能,高可用的消息系统;

    高可用:我们从上面的broker的controller、follower以及partition的replica可以看出他的高可用性;

    高并发:网络模块处理,达到高并发效果;

    高性能:在高并发的前提下,我们需要高性能才能维护高并发,通过高效利用CPU,内存,硬盘达到效果;

kafka模块分析:

    网络模块:

    NIO模型配合reactor模式(事件驱动,接收与分发)

    num.io.threads handler线程数目

    num.network.threads processor线程数目

磁盘模块:

1. 磁盘顺序读写性能远高于随机读写;

2. partition会生成很多小文件,其中,log文件存储数据,index文件存储索引信息(记录offset,磁盘物理位置),且成对出现,文件名是以log文件第一条信息偏移量命名;

首先,消费者通过offset定位消息,通过跳跃表(因为有序且是offset命名),查找log和index文件;

然后,找到文件后,通过index文件,定位到消息在log文件中的位置;

index文件结构:

记录offset,对应的文件偏移量,通过获取的偏移量能够快速定位文件位置;

producer设计:

生产:消息-》封装为ProducerRecord-》序列化-》partition选择-》缓存-》sender线程(批处理)-》broker-》系统缓存-》磁盘(定时刷新)

生产结构:

consumer设计:

p2p模型:同一条消息只能被一个消费者消费

发布订阅模型:允许消息被多个消费者消费,需要订阅topic的所有partition

consumer group设计:

    同一组ID的消费者属于P2P模型,一个消息只能被同一个组的一个消费者消费;

    不同组ID的消费者属于发布订阅模式;一个消息可以被不同组的消费者消费;

一个partition同一时间只会被一个消费者消费;

消费offset存储:

    _consumer_offsets topic,默认50个分区

消费:offset通过跳表算法查找对应文件,然后,查看是否在系统缓存中(在则拷贝到网卡,结束),否则通过稀松索引index文件找到offset所在磁盘物理位置,然后,零拷贝的形式发送;

传统 IO 执行的话需要 4 次上下文切换(用户态 -> 内核态 -> 用户态 -> 内核态 -> 用户态)和 4 次拷贝(磁盘文件 DMA 拷贝到内核缓冲区,内核缓冲区 CPU 拷贝到用户缓冲区,用户缓冲区 拷贝到 Socket 缓冲区,Socket 缓冲区 DMA 拷贝到网卡)。

sendfile 是将读到内核空间的数据,转到 socket buffer,进行网络发送,适合大文件传输,只需要 2 次上下文切换(用户态 -> 内核态 -> 用户态)和 2 次拷贝(磁盘文件 DMA 拷贝到内核缓冲区,内核缓冲区 DMA 拷贝到网卡)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyObject-C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值