kafka
角色
broker
⽣产者创建消息。
该⻆⾊将消息发布到Kafka的topic中。broker接收到⽣产者发送的消息后,broker将该消息追加到当前⽤于追加
数据的 segment ⽂件中。
topic
每条发布到Kafka集群的消息都有⼀个类别,这个类别被称为Topic。
物理上不同Topic的消息分开存储。
主题就好⽐数据库的表,尤其是分库分表之后的逻辑表。
partition
- 主题可以被分为若⼲个分区,⼀个分区就是⼀个提交⽇志。
- 消息以追加的⽅式写⼊分区,然后以先⼊先出的顺序读取。
- ⽆法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。
- Kafka 通过分区来实现数据冗余和伸缩性。
- 在需要严格保证消息的消费顺序的场景下,需要将partition数⽬设为1。
首领和副本
首领副本负责处理消息的读写请求
同步副本只负责消息的同步(和leader副本)
offset偏移量
生产者消费者读取消息的位置
kafka优势
- ⾼吞吐量:单机每秒处理⼏⼗上百万的消息量。即使存储了许多TB的消息,它也保持稳定的性能。
- ⾼性能:单节点⽀持上千个客户端,并保证零停机和零数据丢失。
- 持久化数据存储:将消息持久化到磁盘。通过将数据持久化到硬盘以及replication防⽌数据丢失。
- 零拷⻉
- 顺序读,顺序写
- 利⽤Linux的⻚缓存
- 分布式系统,易于向外扩展。所有的Producer、Broker和Consumer都会有多个,均为分布式的。⽆需停机
即可扩展机器。多个Producer、Consumer可能是不同的应⽤。 - 可靠性 - Kafka是分布式,分区,复制和容错的。
- 客户端状态维护:消息被处理的状态是在Consumer端维护,⽽不是由server端维护。当失败时能⾃动平
衡。 - ⽀持online和offline的场景。
- ⽀持多种客户端语⾔。Kafka⽀持Java、.NET、PHP、Python等多种语⾔。
使用场景
- ⽇志收集:⼀个公司可以⽤Kafka可以收集各种服务的Log,通过Kafka以统⼀接⼝服务的⽅式开放给各种Consumer;
- 消息系统:解耦⽣产者和消费者、缓存消息等;
- ⽤户活动跟踪:Kafka经常被⽤来记录Web⽤户或者App⽤户的各种活动,如浏览⽹⻚、搜索、点击等活动,这些
活动信息被各个服务器发布到Kafka的Topic中,然后消费者通过订阅这些Topic来做实时的监控分析,亦可保存到数据
库; - 运营指标:Kafka也经常⽤来记录运营监控数据。包括收集各种分布式应⽤的数据,⽣产各种操作的集中反馈,⽐
如报警和报告; - 流式处理:⽐如Spark Streaming和Storm。
核心概念
缩写解释
AR
分区中的所有副本统称为AR(Assigned Repllicas)。
AR=ISR+OSR
ISR
所有与leader副本保持⼀定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中
的⼀个⼦集。消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进⾏同步,同步期间内
follower副本相对于leader副本⽽⾔会有⼀定程度的滞后。前⾯所说的“⼀定程度”是指可以忍受的滞后范围,这个范围
可以通过参数进⾏配置。
OSR
与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas)。在正常情况下,所有
的follower副本都应该与leader副本保持⼀定程度的同步,即AR=ISR,OSR集合为空。
HW
HW是High Watermak的缩写, 俗称⾼⽔位,它表示了⼀个特定消息的偏移量(offset),消费之只能拉取到这
个offset之前的消息。
LEO
LEO是Log End Offset的缩写,它表示了当前⽇志⽂件中下⼀条待写⼊消息的offset。