kafka在大数据、分布式架构中都很流行。kafka可以进行流式计算,也可以做为日志系统,还可以用于消息队列。
本篇主要是kafka消息队列相关的知识。
零、kafka作为消息队列的优点:
高吞吐、低延迟:kakfa 最大的特点就是收发消息非常快,kafka 每秒可以处理几十万条消息,它的最低延迟只有几毫秒。高伸缩性: 每个主题(topic) 包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中。持久性、可靠性: Kafka 能够允许数据的持久化存储,消息被持久化到磁盘,并支持数据备份防止数据丢失,Kafka 底层的数据存储是基于 Zookeeper 存储的,Zookeeper 我们知道它的数据能够持久存储。容错性: 允许集群中的节点失败,某个节点宕机,Kafka 集群能够正常工作高并发: 支持数千个客户端同时读写
一、pull模式
消息队列有push模式和pull模式。push模式是消息队列推送给消息消费者,pull模式是消息消费者从消息队列中拉取。
kafka使用了pull模式。
二、发布 - 订阅消息系统
kafka是一个分布式的发布 - 订阅(pub-sub)消息系统。
在发布 - 订阅系统中,消息被保留在主题中。 消费者可以订阅一个或多个主题并使用该主题中的所有消息。
消息生产者称为发布者,消息使用者称为订阅者。
比如,购物网站,有一个订单系统,还有一个物流系统,消息队列可以作为两个系统的消息中间件,订单系统可以将订单数据发送给kafka消息队列,然后物流系统再从消息队列中订阅得到订单数据。
三、角色和组件
消息:
Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。
批次:
为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。
Topics(主题)
消息的种类称为 主题(Topic),可以说一个主题代表了一类消息。相当于是对消息进行分类。主题就像是数据库中的表
Partition(分区)
主题可以被分为若干个分区(partition),同一个主题中的分区可以不在一个机器上,有可能会部署在多个机器上,
由此来实现 kafka 的伸缩性,单一主题中的分区有序,但是无法保证主题中所有的分区有序。
Producer (消息生产者)
向主题发布消息的客户端应用程序称为生产者(Producer),生产者用于持续不断的向某个主题发送消息。
Consumer (消息消费者)
订阅主题消息的客户端程序称为消费者(Consumer),消费者用于处理生产者产生的消息。
Consumer Group (消费者组)
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
每个Consumer Group都有一个唯一的GroupId。

Partition offset(分区偏移)
每个分区消息具有称为 offset
的唯一序列标识。类似数据库自增int Id,随着数据的不断写入 kafka 分区内的偏移量会不断增加,一条消息由一个唯一的偏移量来标识。
偏移量的作用是,让消费者知道自己消费到了哪个位置,下次可以接着从这里消费
Replicas of partition(分区备份)
副本只是一个分区的备份
。 副本从不读取或写入数据。 它们用于防止数据丢失。
Brokers(kafka服务器)
一个独立的 Kafka 服务器就被称为 broker,broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。
一个broker可以容纳多个topic。每个broker都有各自的broker.id。
Kafka Cluster(Kafka集群)
Kafka有多个代理被称为Kafka集群。 可以扩展Kafka集群,无需停机。 这些集群用于管理消息数据的持久性和复制。
Leader(领导者)
Leader是负责给定分区的所有读取和写入的节点。 每个分区都有一个服务器充当Leader
Follower(追随者)
跟随Leader指令的节点被称为Follower。 如果Leader失效,一个Follower将自动成为新的领导者。 跟随者作为正常消费者,拉取消息并更新其自己的数据存储。
Rebalance (重平衡)
消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。
四、Kafka架构

参考资料:
来源:https://www.cnblogs.com/expiator/p/9713433.html