Kafka的原理及使用介绍 | 青训营笔记

83 阅读3分钟

今天是第一次发布学习笔记,希望大家多多都支持,后续会持续更新优化本文内容的。

1.Kafka的简介

Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用与大数据实时处理领域。

1.1消息队列

Kafka 本质上是一个 MQ(Message Queue),同时它具备以下几点优势。

  1. 解耦:允许我们独立的扩展或修改队列两边的处理过程。

  2. 可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

  3. 缓冲:有助于解决生产消息和消费消息的处理速度不一致的情况。

  4. 灵活性&峰值处理能力:不会因为突发的超负荷的请求而完全崩溃,消息队列能够使关键组件顶住突发的访问压力。

  5. 异步通信:消息队列允许用户把消息放入队列但不立即处理它。

1.2工作流程

  1. 首先是创建集群(cluster)
  2. 再新增Topic(逻辑队列)
  3. 然后编写生产者逻辑(producer)
  4. 最后编写消费者逻辑(consumer)
  • 完成了以上几个步骤,一个完整的kafka的搭建就完成了。

1.3 发布/订阅模式

一对多,生产者将消息发布到 topic 中,有多个消费者订阅该主题,发布到 topic 的消息会被所有订阅者消费,被消费的数据不会立即从 topic 清除。

1.4基本架构

Producer: 生产者,也就是发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka。
Consumer: 消费者,也就是接受消息的一方。消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理。
Consumer Group: 一个消费者组可以包含一个或多个消费者。使用多分区 + 多消费者方式可以极大提高数据下游的处理速度,同一消费组中的消费者不会重复消费消息,同样的,不同消费组中的消费者消息消息时互不影响。Kafka 就是通过消费组的方式来实现消息 P2P 模式和广播模式。
Broker: 服务代理节点。Broker 是 Kafka 的服务节点,即 Kafka 的服务器。
Topic: Kafka 中的消息以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。
Partition: Topic 是一个逻辑的概念,它可以细分为多个分区,每个分区只属于单个主题。同一个主题下不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。
Offset: offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序性而不是主题有序性。
Replication: 副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 broker 崩溃或发生网络一场,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。
Record: 实际写入 Kafka 中并可以被读取的消息记录。每个 record 包含了 key、value 和 timestamp。如上图所示。