1.producer+consumer+broker+zookeeper
2.主题(Topic)+分区(Partition)
主题:逻辑概念 分区:物理概念 一个主题可以有多个分区,不同分区可以分配在不同的broker上;即主题可以跨越broker
3.offset
消息在分区的唯一表示,每个消息在分区会分配一个offset;offset可以保证分区内的有序性,但是不能跨区,即分区内有序,不保证主题内顺序性
replica(多副本机制)
每个分区,都有leader和follower,leader用来读写,follower用来同步数据,做备份
水平扩展+容灾
通过增加分区数量,水平扩展 通过增加副本数量,提升容灾能力
consumer容灾
consumer使用的是pull模式拉去数据,并且会保存消费的位置;在宕机重启后可以继续消费(比起推的模式不会丢失)
AR=ISR+OSR
AR:分区内的所有副本 ISR:分区内和leader副本保持一定程度的同步的副本(包括leader)(程度可以调整) OSR:分区内在忍受滞后范围之外的副本 ISR集合和OSR集合,由leader副本来维护
HW+LEO
HW:高水位,指offset,代表可以消费的范围 LEO:代表当前日志文件(分区),下一条消息写入的offset 当这个topic有多个分区时,计算HW会取最小的(存在不一样是因为每个副本的同步能力不一样)
ISR解析
当leader宕机后,重新选去新的leader时,会从ISR集合中去取,因为ISR里面是同步程度最高的。 然后平常使用kafka的写入机制有两种, 一种是同步机制:即要求写入的数据,同步复制到所有的副本才算写完(大大影响效率) 一种是异步机制:即只要保证leader写入,就算完成;但是这种如果写入leader之后,leader挂了,副本没有完全同步数据,可能造成一部分数据丢失; 而有了ISR机制,可以调节参数,来控制进入ISR集合的副本的条件;就有效的权衡了数据可靠性和性能