消息队列kafka基础 | 青训营笔记

74 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 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中组件的基本概念。