Kafka原理

构成:

1.producer:

    producer直接发消息到broker,broker会返回一些topic的元数据信息,比如:这些元信息包括哪些机器是存活的,topic的leader partition都在哪,现阶段哪些leader partition是可以直接被访问的

2.consumers

    1).high-level-api:维持了已消费消息的状态,每次消费的都是下一个消息;还支持以组的形式来消费topic;

    2).simple-api:底层api,维持了一个和单一broker的连接,并且这个API是完全无状态的,每次请求需要指定offset值,可以通过设置offset值来重复读取消费过的数据

3.broker:

    1).partitions:

        topic是以partition的形式存放的,可配置

    2).replications:

        备份机制,实现多个备份,防止单个broker挂了后,数据不会丢失

    3).leaders:

        partition的副本中只有一个会被选举为leader,用来进行读写

核心特性:

    1.压缩:

            kafka支持以集合为单位发送消息,在此基础上,kafka还支持对消息集合进行压缩,producer端可以通过GZIP或SNAPPY格式进行压缩,然后在consumer端进行解压,在大数据处理上,性能瓶颈往往体现在网络上而不是CPU。如何区别消息是否被压缩,kafka在消息头部添加了一个描述压缩属性的字节,这个字节的后两位表示消息压缩采用的编码,如果后两位是0,说明没有被压缩

    2.消息可靠性:

            为了防止消息丢失、多次发送等情况,kafka采用如下处理:

            1).producer端:producer会等待borker成功接收消息的反馈(可通过参数设置来控制等待时间),如果消息丢失或者broker挂了,producer会重新发送(通过参数控制是否等待所有备份节点都收到消息)

            2).consumer端:consumer收到消息,但是在处理过程中挂了,此时consumer会通过offset值重新找到上一个消息在进行处理.当然,consumer还有权限控制这个offset值.

    3.备份机制:

            0.8版本新特性,一个备份数量为n的集群允许n-1个节点失败.在所有备份节点中,有一个节点作为lead节点,这个节点保存了其它备份节点列表,并维持各个备份间的状体同步

     4.高效性相关设计:

            4.1).消息的持久化

                    磁盘性能事实:磁盘驱动器的吞吐量跟寻到延迟是相背离的,也就是所,线性写的速度远远大于随机写,举例:在一个6 7200rpm SATA RAID-5 的磁盘阵列上线性写的速度大概是600M/秒,但是随机写的速度只有100K/秒,两者相差将近6000倍顺序I/O是为了提高读写硬盘的速度

            4.2).常数时间性能保证

                    一个持久化的队列可以构建在对一个文件的读和追加上,kafka数据持久化就是两个文件,一个保存数据(.log文件),一个保存offset相关信息(.index文件)

            4.3).更多的效率考虑

                    1).为了减少大量小IO操作,kafka都是以消息块的形式来追加消息到log中的

                    2).为了减小过多的字节拷贝,kafka设计了标准字节消息,producerconsumerbroker共享这一中消息格式

                        Memory Mapped Files:内存映射文件->直接利用操作系统的Page来实现文件到物理内存的映射,省去了用户空间到内核空间的赋值开销调用文件的read会把数据先放到内核空间的内存中,然后再复制到用户空间的内存中注:Java NIO提供了MappedByteBuffer来实现内存映射

性能瓶颈:

    1.网络传输

    2.磁盘吞吐量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值