如何深入理解【架构师系列】Kafka原理分析之基础篇?

摘要:原创文章,转载请标注。https:www.cnblogs.comboyceleep14728638.html 一、Kafka二、解决问题异步处理应用解耦流量削峰三、特性读写效率网络传输并发能力持久化能力可靠性水平扩展四、基本概念消
原创文章,转载请标注。https://www.cnblogs.com/boycelee/p/14728638.html 一、Kafka二、解决问题异步处理应用解耦流量削峰三、特性读写效率网络传输并发能力持久化能力可靠性水平扩展四、基本概念消息&批次消息批次主题&分区日志Log基本概念Log保存与压缩日志保存日志压缩Broker副本生产者消费者消费者组消息传递模式Kafka架构概图五、核心特性详解消费者单消费者组多消费者组心跳机制再平衡机制再平衡触发条件避免再平衡消费者判“死”条件消费者没有定期地向Coordinator发送心跳请求规定时间内没有消费完poll方法返回的消息避免消费者被判“死”避免被“条件1”判死避免被“条件2”判死位移管理位移主题引入原因消息格式位移提交自动提交手动提交分区副本机制副本机制的优点副本定义副本角色同分区多副本,如何保证副本消息一致性?追随者副本不对外提供服务的原因同步副本(ISR)与非同步副本(OSR)同步副本的标准HWLEOLeader选举少部分副本宕机全部副本宕机为什么不少数服从多数?物理存储存储概述基本概念文件类别日志存储索引消息压缩偏移量索引六、参考七、总结 一、Kafka Kafka是一个分布式的消息系统。 二、解决问题 消息系统通常被应用于异步处理、应用解耦、流量削峰、消息通信等场景。 异步处理 image-20210315230129937 生产者将消息写入消息队列中,消费者异步拉取消息队列消息,从而提升消息处理能力。 应用解耦 image-20210315230734421 Kafka作为消息传递的媒介,各子系统只需要做系统责任内的事情。生产者-消费者模式,Kafka就是消息队列。 流量削峰 image-20210315232052783 正常情况下,上游服务(如报价、营销等)常年流量较大,面对大流量时能够较为从容地应对,但下游应用(如:交易、订单等)由于常年流量较小,面对大流量时会因为准备不足,而导致系统被打垮,引发雪崩。 为了应对这一问题,可以利用消息队列作为临时数据存储节点,消费者根据自身消费能力,通过拉取的方式控制消费速度,达到流量削峰的目的。 三、特性 读写效率 Kafka在面对大流量数据时,能够高效地处理消息的存储与查询。通过软件设计避免硬件读取磁盘的性能瓶颈。 网络传输 批量读取消息,对消息进行批量压缩,从而提升网络利用率。 并发能力 Kafka支持消息分区,每个分区内保证消息的顺序性,多分区之间能够支持并发操作,提升Kafka并发操作。 持久化能力 Kafka将消息持久化至硬盘。网络传输不可靠,所以需要将数据进行持久化。其中利用了零拷贝、顺序读、顺序写、页缓存等技术使Kafa具备高吞吐特性。 可靠性 支持分区多副本,Leader副本负责读写,Follow副本只负责同步Leader副本数据,实现消息冗余备份,提升Kafka容灾能力。 水平扩展 多Producer、Broker、Consumer,均为分布式,多Consumer可以加入同一Consumer Group,每个分区只能分配一个Consumer,当Kafka服务端增加分区数量进行水平扩展时,可以向Consumer Group添加Consumer,提升消费能力。当Consumer Group中有Consumer出现故障下线时,能通过再平衡(Rebalance)对分区进行再分配。 四、基本概念 消息&批次 消息 (1)消息是Kafka的基本单位; (2)消息由key和value的byte数组构成; (3)key能够根据策略将消息发送到指定分区。 批次 (1)为了提升效率,消息被分批写入kafka,同一组消息必须属于同一主题的同一分区; (2)分批发送能够降低网络开销,提升传输速度。 主题&分区 主题(Topic)是用于存储消息分类关系的逻辑单元,可以看做存储消息的集合。分区(partition)是Kafka数据存储的基本单元,可以看做存储消息的集合的子集。Kafka消息通过主题进行分类,同一Topic的不同分区(partition)会分配在不用的Broker上,分区机制提供横向扩展的基础,可以通过增加并在其上分配partition来提升Kafka的消息并行处理能力。
阅读全文