一:kafka简介(看书总结版)
一:基本概念
1.kafka 的作用:解决应用解耦、异步消息、流量削峰的问题;
个人理解:kafka使用于业务流程的分支部分,用来解耦,也可以加强并发;比如评论的技术功能,订单系统的送积分等等;好处多多,使主流程更轻薄、逻辑清晰、高请求量下仍保证功能可用性等等;缺点也有些:需要做好失败的准备,尤其是消费者需要处理“仅有一次”,做好进度commit、失败记录、失败通知等;
2.kafka作为流式数据平台:提供事件流的发布和订阅、节点的故障容错和存储、具备流处理能力(?);
a)kafka利用消费组,实现发布订阅和点对点的消费模式;
b)存储系统,保证消息的可用性;
3.基本概念:
a)kafka集群、代理服务器
b)消费者、主题、消费组、消费进度
c)生产者、提交日志
d)分区、 副本、主副本、日志文件
4.消费模型
pull模型、消费者提交消费进度、定时提交、手动提交
at least once 、 at more once 、(at least once + 缓存)
二:kafka的设计
1.文件系统的持久化与数据传输效率
预读、后写、磁盘缓存、
零拷贝技术,解决硬盘--> 内核空间的缓存--->用户空间的缓存--->内核空间的socket缓冲区--->发送到网络,使用零拷贝,秩序将磁盘文件的数据复制到页面缓存一次,然后直接发送到网络上;
2.生产者和消费者
生产者 lingger.ms、batch.size来控制消息生成的效率;
消费者拉取模式,enable.auto.commit 自动提交offset,at least once 、 at more once 、(at least once + 缓存)、分区只由一个消费者使用;消费者保存成检查点文件;
3.副本和容错
备份副本需要和主副本保持数据同步,主副本会根据备份副本的转态进行移出和加入主副本的同步集合中;
生成消息成功:一条消息只有被ISR集合的所有副本都运用到本地的日志文件,才会认为消息被成功提交了;
4.控制器、zookeeper
消费者的元数据会注册在ZK中,比如分区的便宜了、分区所属的消费者、所有消费者,ZK还记录了Broker的信息,比如 Broker List、控制器等;