一:基本概念

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缓冲区--->发送到网络,使用零拷贝,秩序将磁盘文件的数据复制到页面缓存一次,然后直接发送到网络上;

kafka 一般都用来做什么 kafka有什么作用_kafka 一般都用来做什么

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、控制器等;