# Kafka 术语
* 消息(Record)
* Kafka 中发布订阅的对象是 `Topic`,可以为每个业务、应用、数据类型定义 Topic。
* 生产者(Producer)
* 消费者(Consumer)
* 客户端(Clients):生产者、消费者统称为客户端
* 服务端
* Kafka 的服务器端:Broker 服务进程
* 一个 Kafka 集群由多个 Broker 组成
* Broker:负责接收和处理客户端发送过来的请求 & 消息持久化
* 多个 Broker 进程能够运行在同一台机器上
* 但常见做法:将不同的 Broker 分散运行在不同的机器上
* 备份机制(Replication)
* 备份思想:把相同的数据拷贝到多台机器上
* 副本(Replica):Kafka 中称这些相同的数据为副本
* 副本保存相同的数据
* 但有不通的角色和作用
* 领导者副本(Leader Replica)
* 对外提供服务(i.e. 与客户端进程交互)
* 追随者副本(Follower Replica)
* 只追随领导者副本数据
* 不对外提供服务
* 副本的工作机制
* Producer
* 向 Leader Replica 写消息
* Consumer
* 从Leader Replica 读消息
* Follower Replica
* 向 Leader Replica 发送请求,获取最新生产的消息
* 目的:与 Leader 保持同步
* 副本的优缺点
* 优点
* 保证数据的持久化 / 消息不丢失
* 缺点
* 不能解决伸缩性问题
* 伸缩性(Scalability)
* 伸缩性问题:当 Leader Replica 副本积累太多以至于单台 Broker 机器无法容纳的问题
* 考虑将数据分割成多份保存在不同的 Broker 上
* 分区机制(Partitioning)
* Kafka 将每个 Topic 划分为多个分区(Partition)
* 每个分区是一组有序的消息日志
* Producer 生产的每条消息只会发送到一个分区中
* Kafka 分区编号从 0 开始
* 副本是分区这个层级定义的,即对 Partition 实现副本机制
* 每个 Partition 可以配置 N 个副本,其中 1 个 Leader Replica,N-1 个 Follower Replica
* Producer 向分区写消息,每条消息在分区中的位置信息由一个叫`位移(Offset)`的数据来表征
* 分区位移从 0 开始
* 日志
* 追加写
* 日志段
* 通过日志段进行回收
### Broker 持久化数据
* Kafka 使用消息日志(Log)保存数据
* 一个日志
* 定义:磁盘上一个只能追加写(Append-only)消息的物理文件
* Apped-only 避免了缓慢的随机 IO 操作,改为性能更好的顺序 IO 写
* 回收磁盘
* 通过日志段(Log Segment)机制
* 当写满了一个日志段后,Kafka 会自动切分出一个新的日志段
* 同时将老日志段封存
* Kafka 在后台通过定时任务,定期检查老日志段是否可以删除,从而回收磁盘
### P2P 模式的实现
* P2P 指消息只能被下游一个消费者消费
* 消费者组(Consumer Group)
* 通过饮用消费者组来实现 P2P
* 定义:多个 Consumer 共同组成一个组来消费一组 Topic
* 这组 Topic 中的每个 Partition 都只会被组内的一个 Consumer 消费
* e.g. 一个 Topic 被分 N 个 Partition,那么这个消费者组中可以有 N 个 Consumer,每一个 Consumer 消费一个 Partition
* 分配后的 Partition 其他 Consumer 不能消费
* 引入消费者组的目的
* 提升消费端吞吐量(TPS)
* 一个消费者实例(Consumer Instance)
* 可以是业务
* 也可以是单个进程、线程
* Kafka 重平衡(Rebalance)
* 当一个消费者组内某个 Consumer 实例挂了
* Kafka 通过自动检测,将 Failed Consumer 实例之前负责的 Partition 转移给其他活着的消费者
* 消费者位移(Consumer Offset)
* 每个 Consumer 在消费中通过字段记录它当前消费到了哪个 Partition 的哪个位置
* 每个 Consumer 都是不一样的
* 上面位移表示 Partition 内消息的位置,是不同的,因此其也称为分区位移
* 消费者位移可能随时变化,类似一个指针
### Kafka 的三层架构
* Topic
* 每个 Topic 配置 M 个 Partition
* Partition
* 每个 Partition 配置 N 个副本
* 1 个 Leader Replica,对外提供服务
* N-1 个 Follower Replica,只提供消息冗余作用
* Record
* 每个 Partition 包含若干 Record
* 每个 Record 的位移从 0 开始,依次递增
### Kafka 提供高可用的手段总结
* Broker
* Kafka 集群中每台机器都会运行多个 Broker 进程
* 一台机器挂了,其他机器的 Broker 依然能够对外提供服务
* 备份机制
### Follower Replica & MySQL
* Kafka 的 Follower Replica 是不会对外提供服务的
* 相反的,MySQL 的从库会对外提供读服务
![](https://img.kancloud.cn/06/db/06dbe05a9ed4e5bcc191bbdb985352df_1173x634.png)
- 概览
- 入门
- 1. 消息引擎系统
- 2. Kafka 术语
- 3. 分布式流处理平台
- 4. Kafka “发行版”
- 5. Kafka 版本号
- 基本使用
- 6. 生产集群部署
- 7. 集群参数配置
- 客户端实践与原理
- 9. Consumer 分区机制
- 10. Consumer 压缩算法
- 11. 无消息丢失配置
- 12. 客户端高级功能
- 13. Producer 管理 TCP
- 14. 幂等生产者和事务生产者
- 15. 消费者组
- 16. 位移主题
- 17. 消费者组重平衡(TODO)
- 18. 位移提交
- 19. CommitFailedException
- 20. 多线程开发者实例
- 21. Consumer 管理 TCP
- 22. 消费者组消费进度监控
- Kafka 内核
- 23. 副本机制
- 24. 请求处理
- 25. Rebalance 全流程
- 26. Kafka 控制器
- 27. 高水位和 Leader Epoch
- 管理与监控
- 28. Topic 管理
- 29. Kafka 动态配置
- 30. 重设消费者组位移
- 31. 工具脚本
- 32. KafkaAdminClient
- 33. 认证机制
- 34. 云下授权
- 35. 跨集群备份 MirrorMaker
- 36. 监控 Kafka
- 37. Kafka 监控框架
- 38. 调优 Kafka
- 39. 实时日志流处理平台
- 流处理
- 40. Kafka Streams
- 41. Kafka Streams DSL
- 42. Kafka Streams 金融
- Q&A