这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战
什么是MQ
消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。
为什么使用MQ
削峰填谷和松耦合
削峰填谷指缓冲上下游瞬时突发流量,使其更平滑。特别是对于发送能力很强的上游系统,如果没有消息引擎的保护,下游系统可能会直接被压垮导致全链路服务雪崩。通过消息引擎,可以有效地对抗上游的流量冲击,将上游的峰填满到谷中,避免流量震荡。消息引擎系统的另一好处在于发送方和接收方的松耦合,减少了系统间不必要的交互。
Kafka术语
消息:Kafka 中的数据单元,也被称为记录,可以把它看作数据库表中某一行的记录。
批次 Batch:为提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。
主题 Topic:Topic是发布订阅的对象,可以为每个业务、每个应用甚至是每类数据都创建专属的主题。
分区 Partition:Topic 可以被分为若干个分区 (partition) ,一个分区只属于一个主题。同主题的分区会部署在多个机器上,实现 kafka 的伸缩性。单一主题中的分区有序,但是无法保证主题中所有的分区有序。
客户端 Clients:生产者和消费者的统称。可以同时运行多个生产者和消费者实例,这些实例不断地向集群中的多个主题生产和消费消息。
生产者 Producer:向主题发布消息的客户端应用程序,通常持续不断地向一个或多个主题发送消息。
消费者 Consumer:订阅这些主题消息的客户端应用程序。和生产者类似,消费者也能够同时订阅多个主题的消息。
消费者群组 Consumer Group:由一个或多个消费者组成的群体。
偏移量 Consumer Offset :是一种元数据,一个不断递增的整数值,用来记录消费者发生重平衡时的位置,以便用来恢复数据。
服务端 Broker:Kafka的服务器端,负责接收和处理客户端发送过来的请求,以及对消息进行持久化。常见的做法是将不同的Broker 分散运行在不同的机器上,如果某台机器宕机,上面运行的所有Broker 进程都挂掉了,其他机器上的Broker 也依然能够对外提供服务。这是Kafka提供高可用的手段之一。
集群 cluster:由一个或多个 Broker 组成,每个集群都有一个 Broker 同时充当了集群控制器的角色(自动从集群中选举出来)。
副本 Replica:消息的备份叫做副本,副本的数量是可以配置的,Kafka 定义两类副本:领导者副本*(Leader Replica)和追随者副本(Follower Replica)*,前者对外提供服务,后者被动跟随。
重平衡 Rebalance:消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。是消费者端实现高可用的重要手段。
Kafka的特性
- 高吞吐、低延迟:收发消息非常快,每秒可以处理几十万条消息,最低延迟只有几毫秒。
- 高伸缩性:每个主题包含多个分区,主题中的分区可以分布在不同的主机中。
- 持久性、可靠性:允许数据的持久化存储到磁盘,并支持数据备份防止数据丢失。
- 容错性:允许集群中的节点宕机,集群仍能够正常工作。
- 高并发:支持数千个客户端同时读写。