这是我参与「第五届青训营」伴学笔记创作活动的第 11 天。
-
介绍
-
问题场景:系统崩溃;服务处理能力有限;链路耗时长尾;日志存储故障
-
解决方法:使用消息队列,解耦,削峰,异步,日志处理
-
消息队列(MQ),指保存消息的一个容器,本质是一个队列。需要支持高吞吐、高并发、并且高可用
-
-
如何使用kafka?
- 首先,创建kafka集群,在集群中创建topic,并设置分区数量,引入kafka的sdk,分别实现上游的生产逻辑,把代码发到topic中,对代码进行业务处理
-
kafka基本概念
-
Topic:kafka中的逻辑队列,可以认为是不同的业务场景就是不同的topic,对于业务来说,所有的数据都存储在topic中
-
Cluster:物理集群,每个集群中可以新建不同的topic,去处理不同的业务数据
-
Producer: 生产者,负责将业务消息发送到 Topic 中
-
Consumer: 消费者,负责消费 Topic 中的消息
-
ConsumerGroup:消费者组,不同组 Consumer 独立,消费进度互不干涉
-
Partition:topic的一个分区,内部存储消息,topic有多个分区,不同分区消息并发处理
-
Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内严格递增,保证消息在一个partition内部的顺序性
-
Replica:每个分片有多个 Replica,通常分布在集群的不同机器上,以达到容灾。
-
副本分为leader和follower角色,Leader用来对外写入和读取,follower不断拉取lerader中的数据,努力保持与leader一致的状态。
-
ISR,ISR中的follower与leader的差距不大。若leader宕机,可在ISR中选择一个副本重新成为leader,保证高可用性
-
-
broker:集群中节点,所有broker组成一个集群。controller,负责集群中所有副本和broker分配
-
架构:集群的上层有zookeeper组件,和controller配合,存储集群元数据,分区分配信息等
-
-
总结
了解了消息队列的应用场景,定义,以及kafka中组件的基本概念。