Kafka-1 基本概念
-
- 什么是Kafka
-
- [1. 设计主要目标:](#1. 设计主要目标:)
- [2. 常见的消息传输模型:](#2. 常见的消息传输模型:)
- [3. 为什么需要消引擎](#3. 为什么需要消引擎)
- Kafka的基础架构
-
- [1. 客户端:](#1. 客户端:)
- [2. 服务端](#2. 服务端)
- [3. 副本与分区的关系:](#3. 副本与分区的关系:)
- [4. 消费组:](#4. 消费组:)
- [5. 重平衡机制:](#5. 重平衡机制:)
- Kafka种类
什么是Kafka
Apache Kafka 是一款开源的消息引擎系统,也是一个分布式流处理平台,广泛应用于实时数据处理、日志收集、消息队列等领域。
1. 设计主要目标:
- 提供一套API实现生产者与消费者
- 降低网络传输和磁盘存储开销
- 实现高伸缩性架构
2. 常见的消息传输模型:
- 点对点模型: 系统A发送的消息只能被系统B接收,其余所有系统都不能接收系统A的消息
- 发布-订阅模型: 有一个主题(Topic)的概念,该模型有发送方和接收方。发送方被称为发布者,接收方被称为订阅者。和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个
- 请求-相应模型: 客户端发送请求消息给服务端,服务端处理请求并发送响应消息给客户端。这种模型通常用于客户端向服务端请求数据或执行操作,并等待服务端返回响应。
- 发布-订阅 加上 请求-响应模型: 这种模型结合了发布/订阅模型和请求/响应模型的特性。消息的发送者可以发布消息到一个主题,多个接收者可以订阅该主题并接收消息。同时,某些接收者还可以向发送者发送请求消息,并等待发送者的响应消息。
3. 为什么需要消引擎
- 解耦: 发送方与接收方之间可以解耦。发送者只需要将消息发送到新消息引擎中的特定主体或者队列,而不需要直接知道接收者的详细信息。接收者可以根据自己的需求选择订阅相应的主题或者队列来接收消息。
- 削峰填谷: 缓冲上下游瞬间的突发流量,当上游突然有大量数据发送到下方时,接收者可以分批进行处理。
- 异步通信: 消息引擎支持异步通信模式,发送者可以将消息发送到消息引擎中立刻返回,不需要等待接收者的相应。可以提高系统的响应速度和并发处理能力。
Kafka的基础架构
1. 客户端:
- 生产者(Producer): 生产者负责不断的向Kafka集群中的一个主题或者多个主题发送消息
- 消费者(Comsumer): 消费者可以从Kafka集群中的一个或者多个主题消息,并将消费者的偏移量(offset)提交回Kafka以保证消息的顺序性与一致性
2. 服务端
- broker: 一个Kafka集群由多个Broker构成,Broker负责接收和处理客户端发送过来的请求,及时对消息进行持久化。将其分散运行在不同的机器中,防止机器宕机,导致服务不可用。
- Replication: 将相同的数据拷贝到多台机器上,这些相同的数据被称为副本。副本分类Leader副本与Follower副本,Leader副本负责读写操作,Follower副本不进行读写操作,只对Leader副本发送请求,同步数据。
- Topic: 主题,Topic是Kafka中承载消息的逻辑容器。生产者将信息发送到特定的Topic,消费者从Topic中读取消息。
- Partition: 分区,是Topic的物理分区,一个Topic可以被分成多个Partition,每个Partition是一个有序且持久化存储的日志文件。
- offset: offset是Kafka消费者在某个分区中消费消息的位置标识,即通过位移就知道自己消费到哪条消息了。
3. 副本与分区的关系:
每个分区下可以有多个副本,但每个分区只能有一个Leader副本
4. 消费组:
多个消费者实例共同组成一个组来消费一组主题,提升消费端的吞吐量。
5. 重平衡机制:
当某个消费者挂掉之后,我们的Kafka会自动将这个挂掉的实例负责的分区转移给其他的消费者。冲平衡机制也是Kafka消费者端实现高可用的重要手段
- Kafka渐进式重平衡机制 :当消费者进行重平衡的时候,会导致STW问题,为了尽量减少数据中断和不必要的分区变更,在Kafka2.4.0时引入"渐进式重平衡机制",当开启了CooperativeStickyAssignor之后,Kafka会通过两阶段分配机制实现渐进式冲平衡。
Kafka种类
Kafka种类:
- Apache Kafka:最正宗的 Kafka
- Confluent Kafka:商业化 Kafka 工具开发
- Cloudera/Hortonworks Kafka:集成了目前主流的大数据框架,能够帮助用户实现从分布式存储、集群调度、流处理到机器学习、实时数据库等全方位的数据处理。
特点:
Apache Kafka:开发人数最多、版本迭代最快的 Kafka。他缺失了一些监控框架或工具,我们可以使用第三方的框架来进行弥补。适用于仅仅需要一个消息引擎系统亦或是简单的流处理应用场景,同时需要对系统有较大把控度的场景。
Confluent Kafka:含有跨数据中心备份和集群监控。适用于需要用到 Kafka 的一些高级特性的场景下。
CDH/HDP Kafka:大数据云公司提供的 Kafka,内嵌 Apache Kafka。优势在于操作简单,节省运维成本;缺陷在于把控度低,演进速度较慢。