消息 message
Kafka的数据单元,类似数据库的一条记录。
键 key
消息的可选的元数据,如hash到不同分区时用到。
批次 batch
一组消息。kafka分批发送消息来提升吞吐。
模式 schema
消息编码方式。
主题 topic
类似数据库的表,或者目录(实际上主题会对应目录)
分区 partition
一个主题可以被划分为多个分区,每个分区对应一块消息日志(log)。分区可以时分布式的,保证伸缩性。
流 stream
生产者->消费者的数据。
生产者 producer
发布消息到topic的角色。又称发布者,写入者。
消费者 consumer
读取topic中消息的角色。又称订阅者、读者。
分区所有权关系 partition ownership
消费者与分区的对应关系,称消费者拥有分区的所有权。
偏移量 offset
一种元数据,是一个递增的整数值。既可以表示消息存在的位置,也能表示消费者消费到的位置。
消费者组 consumer group
协同完成一项工作的消费者的集合。消费者通过group.id指定。
服务器 broker
一台机器。
集群 cluster
很多台机器(broker)共同组成的。
集群控制器 controller
自动从集群的活跃broker中选举出的一个broker同时充当控制器的角色。控制器负责管理工作,包括将分区分配给broker和监控broker等。
通过抢注zookeeper的/controller+epoch机制竞争。控制器负责分区的首领leader选举。当控制器发现有broker离开集群,就知道有些分区会需要新的首领,它根据同步副本(in-sync)分配谁是新的leader,谁是follower(跟随者)。随后新leader开始接受生产消费请求,follower从leader复制数据。
副本 replica
分区的复制品。由于每个复制品都有可能成为leader,所以他们原则上等价,都叫副本。
首领 leader
A分区在Bbroker上,那么B为A分区的首领。首领本身也是副本,称首领副本。首领副本有两个任务:接受生产消费请求,明确哪些follower是同步的。
跟随者 follower
分区的副本,从leader复制数据。称跟随者副本。
同步的副本 in-sync replica
follower通过向leader请求数据,leader通过其偏移量知道follower的状态,如果10s内没有请求,或者10s内没有请求最新的数据,leader便认为follower是不同步的。不同步的副本在首领失效时没有资格当选leader。相反就是同步的副本(控制器在重选leader时就是遍历这个集合)。
首选首领 prefer leader
重建分区时,为了在broker之间均衡,须指定希望成为leader的分区。如果设置了自动leader平衡,那么首选首领不是当前首领时会自动触发选举,让broker恢复均衡。
序列化器 serializer
对象到字节的编码器,字节到对象的解码器。
分区重分配 partition reassign
主题的分区发生变化,例如增加分区,或者更改分区到其他broker。
消费者再均衡 consumer rebalance
分区的所有权由一个消费者转移到另一个消费者。再均衡带来了消费者的高可用性和可伸缩性。再均衡期间,消费者无法读取消息,造成群组一小段时间的不可用。另外分区重新分配给消费者时,消费者当前读取状态会丢失,可能需要刷新缓存。
消费者再均衡可能发生在新的消费者加入或离开,分区数改变,订阅的正则表达式匹配了新的topic。所以分区重分配会触发消费者再均衡。再均衡只会在poll操作中发生。
群组协调器 group coordinator
也是某个broker,负责接收消费者的心跳,传递由群主发来的分区分配信息到其他消费者,总之就是协调消费者的中间角色。
群主 group manager
消费者要加入群组时,会向群组协调器发送joinGroup请求。第一个加入群组的消费者将成为群主。群主从协调器拿到消费者列表,并为其他消费者分配分区,之后传递给协调器,协调器在发送所有权关系到相应的消费者,所以只有群主知道所有消费者的分区分配信息。再均衡时这个过程会重复发生。
消费者心跳 consumer heartbeat
用于维持与群组的关系和分区的所有权。心跳也是在poll或者commit offset时发送的。
消费者异常时,群组协调器会等待几秒确认他死亡才触发再均衡,所以正常情况下消费者在主动离开时会告诉协调器,协调器立即触发再均衡,减少停顿(非正常离开可能会导致整个群组在一段时间内无法读取消息)。
订阅主题 subscribe
消费者的行为。
轮询 poll
消费者请求数据的行为。但不只是请求数据,例如心跳的发送,再均衡也是在poll中进行的。所以要确保在poll中任何处理工作尽快完成。
线程安全 thread safe
kafka生产者时线程安全的,消费者不是线程安全的。
提交 commit
消费者行为,更新分区的当前位置。消费者可提交偏移量到kafka内部主题_consumeroffset,在发生再均衡时,新的消费者会读取offset。
自动offset提交 auto commit
每过一定周期自动提交poll下来的最大偏移量。
再均衡监听器 rebalance listener
在再均衡发生时,可以让某些消费者失去分区的所有权之前,做一些提交或者清理工作。分别有两个钩子,发生在再均衡之前重分配之后。
临时节点 temporary node
zookeeper的概念,broker依赖zookeeper进行集群关系,启动时会注册临时节点到zookeeper,宕机时临时节点消失,其他broker订阅了zookeeper从而知道有broker宕机。
元数据请求 metadata request
客户端向任意broker发送,broker告诉客户端,主题的分区,分区的副本,leader在哪里。帮助客户端直接发送请求到leader。客户端会缓存信息,并定时刷新。在客户端收到非首领错误,会尝试刷新元数据,因为这样可能会拿到最新的leader信息。
生产请求 produce request
生产请求首先会验证是否有权限写入,其次时ack=0、1、all,以便消息成功接收。
消费请求 consume request
消费请求时,broker会缓冲一些消息,直到达到数量或时间,再返回给消费者。以此提高性能。另外并不是所有保存在leader上的消息都可以被消费者读取,只有同步的才可以。
片段 segment
分区被划分为很多片段。写入数据时,达到片段上限就会关闭当前,打开新的片段。以便方便地查找消息和删除消息。
活跃片段 active segment
当前正在写入的片段。活动片段不会被删除。kafka会为每个片段打开一个文件句柄,所以必须要对操作系统进行调优。
索引 index
为了帮助broker更快地定位到指定的偏移量,为每个分区维护了一个索引。索引时可以删除的,kafka会自动生成索引。
compact策略
当键不为null时,相同的键只会保留最后的值。compact策略不会对当前片段进行清理。
完全删除某个key
设置value=null。kafka会先进行常规清理,该消息作为墓碑消息保留一段时间。
保证 guarantee
可靠性保证,确保系统在各种不同环境下能够发生一致行为。
复制系数 replication factor
一个分区所有副本的数量。factor为N需要N个broker,并需要N倍的存储空间。
不完全首领选举 unclean leader election
允许不同步的副本成为首领,提高可用性,增加丢消息的风险。
最少同步副本 min insync replicas
topic和broker级别上,低于最小值broker将不可写。
幂等性 idempotency
重复消息不会对结果的正确性造成影响。
消费者延迟 lag
消费者位置与最新的offset之间的距离。也就是消费者来不及处理最新的消息了。
领取专属 10元无门槛券
私享最新 技术干货