Kafka
Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。
概念
Producer:消息生产者,向Broker发送消息的客户端
Broker:消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群
Consumer:消息消费者,从Broker读取消息的客户端
ConsumerGroup:每个Consumer属于一个特定的Consumer Group,一条消息可以发送到多个不同的Consumer Group,但是一个Consumer Group中只能有一个Consumer能够消费该消息
Partition:物理上的概念,一个topic可以分为多个partition,每个partition内部是有序的
Topic:主题,Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
消息:Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。
批次:为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。
偏移量(offset):一种元数据,它是一个不断递增的整数值,用来记录消费者发生重平衡时的位置,以便用来恢复数据。
副本:Kafka 中消息的备份又叫做 副本(Replica),副本的数量是可以配置的,Kafka 定义了两类副本:领导者副本(Leader Replica) 和 追随者副本(Follower Replica),前者对外提供服务,后者只是被动跟随。
重平衡(Rebalance):消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。
生产者
高性能
顺序读写
零拷贝
消息压缩
分批发送
分区策略
顺序轮训(默认):顺序分配,消息是均匀的分配给每个 partition,即每个分区存储一次消息
随机轮训:随机轮询简而言之就是随机的向 partition 中保存消息
key-ordering 策略:Kafka 中每条消息都会有自己的key,一旦消息被定义了 Key,那么你就可以保证同一个 Key 的所有消息都进入到相同的分区里面,由于每个分区下的消息处理都是有顺序的,故这个策略被称为按消息键保序策略
消费者
如果应用需要读取全量消息,那么请为该应用设置一个消费组
如果该应用消费能力不足,那么可以考虑在这个消费组里增加消费者
消费者组中的消费者数量不应该大于分区数量,多余的消费者会空闲
消费方式
点对点:一个消费者群组消费一个主题中的消息,这种消费模式又称为点对点的消费方式,点对点的消费方式又被称为消息队列
发布订阅:一个主题中的消息被多个消费者群组共同消费,这种消费模式又称为发布-订阅模式
重平衡
最初是一个消费者订阅一个主题并消费其全部分区的消息,后来有一个消费者加入群组,随后又有更多的消费者加入群组,而新加入的消费者实例分摊了最初消费者的部分消息,这种把分区的所有权通过一个消费者转到其他消费者的行为称为重平衡
优点:重平衡非常重要,它为消费者群组带来了 高可用性 和 伸缩性,我们可以放心的添加消费者或移除消费者。
缺点:在重平衡期间,消费者无法读取消息,造成整个消费者组在重平衡的期间都不可用。另外,当分区被重新分配给另一个消费者时,消息当前的读取状态会丢失,它有可能还需要去刷新缓存,在它重新恢复状态之前会拖慢应用程序。
Last updated