Kafka基本概念

消息 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之间的距离。也就是消费者来不及处理最新的消息了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180824G1R6Y200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券