kafka消息队列的简单理解

為{幸葍}努か 提交于 2019-12-19 03:33:04

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架构

一个典型的 Kafka 集群中包含若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

 

参考资料:

最好的Kafka 入门文章

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!