kafka的12个重要概念
- 1、服务器broker
-
- [1.1、Broker 的主要功能](#1.1、Broker 的主要功能)
- [1.2、Kafka Broker 的架构](#1.2、Kafka Broker 的架构)
- 1.3、配置和管理
- 1.4、高可用性和负载均衡
- 1.5、总结
- 2、主题topic
- 3、事件Event
- 4、生产者producer
- 5、消费者consumer
- [6、消费组consumer group](#6、消费组consumer group)
- 7、分区partiton
- 8、偏移量offset
- 9、Replica副本
-
- 9.1、定义
- 9.2、主副本与从副本
- [9.3、 副本的工作机制](#9.3、 副本的工作机制)
- 9.4、副本的状态
- 9.5、副本的容错与高可用性
- 9.6、副本配置
- 9.7、副本的管理
- 9.8、总结
- 10、ISR副本
- 11、LEO(日志末端偏移量)
- [12、HW(High Watermark)高水平值](#12、HW(High Watermark)高水平值)
- [13、ISR副本、LEO(日志末端偏移量)、HW(High Watermark)高水平值三者之间的关系](#13、ISR副本、LEO(日志末端偏移量)、HW(High Watermark)高水平值三者之间的关系)
1、服务器broker
Broker 是 Kafka 集群中的一个服务器,它负责接收、存储和转发消息。Kafka 集群由多个 broker 组成,这些 broker 通常分布在不同的物理或虚拟服务器上,以实现负载均衡和高可用性。
一个独立的 Kafka 服务器被称为 bro胎儿 broker 接收来自 生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。 broker 为消费者提供服务,对读取分区的请求作出响应,返
回已经提交到磁盘上的消息。根据特定的硬件及其性能特征,单个 broker 可以轻松处理数千个分区以及每秒百万级的消息量。
1.1、Broker 的主要功能
1、消息存储: Broker 负责将生产者发送的消息存储到磁盘上,并在需要时将这些消息提供给消费者。消息被存储在 Kafka 中的称为 topic 的数据结构里,每个 topic 又可以分为多个 partition。
2、消息转发: Broker 接收生产者发送的消息,并将其写入对应的 topic 和 partition。当消费者订阅某个 topic 时,broker 会将该 topic 中的数据传送给消费者。
3、分区和副本管理: Kafka 的每个 topic 都可以分成多个分区,每个分区可以在不同的 broker 上存储。这有助于实现数据的分布和负载均衡。每个分区可以有多个副本,这些副本分布在不同的 broker 上,以确保数据的高可用性和容错性。Broker 负责管理这些分区及其副本的状态。
4、Leader 和 Follower: 每个分区都有一个 leader 和若干个 follower。leader 处理所有对分区的读写请求,而 follower 复制 leader 的数据以保证副本的一致性。Broker 还负责协调 leader 和 follower 的角色。
1.2、Kafka Broker 的架构
Producer: 生产者将消息发送到 Kafka 集群的某个 broker。
Broker: 处理和存储来自生产者的消息,并将它们分配到相应的 topic 和 partition。
Consumer: 消费者从 broker 订阅 topic,并读取存储在 topic 中的消息。
1.3、配置和管理
配置: 每个 Kafka broker 可以通过 server.properties 文件进行配置,主要配置项包括 broker ID、监听端口、日志目录、zookeeper 连接信息等。
管理: Kafka 提供了多种工具来管理 broker,例如 kafka-broker-api-versions.sh 可以查看 broker 的 API 版本,kafka-topics.sh 可以管理 topic 和 partition,kafka-consumer-groups.sh 可以查看消费者组的状态等。
1.4、高可用性和负载均衡
通过在 Kafka 集群中运行多个 broker,Kafka 可以实现数据的高可用性和负载均衡。数据的冗余存储和分布式架构保证了系统的可靠性和可扩展性,即使某些 broker 出现故障,数据和服务也不会中断。
1.5、总结
Kafka 的 broker 是集群中负责数据存储和转发的核心组件。它们处理来自生产者的消息,存储数据,协调数据的副本,提供给消费者,并确保系统的高可用性和负载均衡。通过合理配置和管理 broker,可以构建高效、可靠的消息系统。
2、主题topic
在 Kafka 中,topic 是一种用于分类和组织消息的机制。它是 Kafka 中数据存储和传输的基本单位。每个 topic 可以包含多个 partitions,每个 partition 是一个日志文件,按顺序存储消息。
2.1、主要特点
消息分类: Topic 用于将消息分类到不同的逻辑组,使生产者和消费者可以按需读取和写入数据。
分区: 每个 topic 可以分成多个 partition,这样可以实现并行处理和负载均衡。每个 partition 是有序的,消息在其中的顺序是保证的。
数据冗余: Topic 的每个 partition 可以有多个副本(replicas),分布在不同的 broker 上,这有助于数据的持久性和高可用性。
持久化: 消息在 topic 中按照配置的保留策略(如时间或大小)进行持久化。
消费模式: 消费者可以订阅一个或多个 topic,根据需求消费其中的数据。
总结来说,topic 在 Kafka 中是一个核心概念,负责组织和管理消息的存储与传输。
3、事件Event
在 Kafka 中,event 是指传输和存储的消息单位。每个 event 包含实际的数据内容,以及可能的元数据(如时间戳、键等)。这些 events 被写入到特定的 topic 中,并按顺序存储在分区(partition)里。消费者从 topic 中读取这些 events,进行处理和分析。总的来说,event 是 Kafka 中消息流的基本构建块。
4、生产者producer
在 Kafka 中,producer 是指负责将消息(或称为 events)发送到 Kafka 集群的组件。Producer 是 Kafka 的一个重要角色,它将数据发布到指定的 topic 中,然后 Kafka 的 broker 处理存储和转发这些数据。以下是关于 Kafka producer 的一些关键点:
4.1、主要功能
1、消息发送: Producer 负责将消息写入 Kafka 集群中的一个或多个 topic。消息可以是任何形式的数据,比如日志记录、事件数据等。
2、负载均衡: Producer 可以将消息发送到不同的分区(partitions)以实现负载均衡。通常,producer 会根据某种策略(如消息键、轮询等)来决定将消息写入哪个分区。
3、数据序列化: 在发送消息之前,producer 需要将数据序列化成 Kafka 可以存储的格式。Kafka 提供了多种序列化机制(如 JSON、Avro、Protobuf),也允许用户自定义序列化方式。
4、消息确认: Producer 可以配置不同的 acks(确认机制),来控制消息的可靠性。设置 acks=0 时,producer 不会等待 broker 的确认,设置 acks=1 时,producer 会等待 leader 的确认,而 acks=all(或 acks=-1)则要求所有副本都确认消息写入。
5、批量发送: 为了提高性能,producer 可以将多条消息打包成一个批次进行发送。这种批量发送可以减少网络往返次数,从而提高吞吐量。
6、重试机制: Producer 具备重试机制,当发送消息失败时,可以根据配置自动重试。重试策略可以帮助提高消息的成功率。
4.2、Producer 的配置选项
1、bootstrap.servers: 指定 Kafka 集群中 broker 的地址,producer 使用这些地址来连接到集群。
2、key.serializer 和 value.serializer: 用于将消息的键和值序列化为字节数组,以便 Kafka 存储和处理。
3、acks: 配置消息确认机制,决定 producer 等待多少 broker 确认消息写入。
4、batch.size: 配置批量发送的大小,决定 producer 在发送消息之前最大可以积累多少字节的数据。
5、linger.ms: 配置消息的延迟时间,决定 producer 在发送消息之前最多等待多少毫秒,以便打包更多的消息。
6、retry.backoff.ms: 配置当消息发送失败时,producer 等待的时间,以便进行重试。
4.3、Producer 的工作流程
初始化: Producer 初始化连接到 Kafka 集群,并确定要发送消息的 topic 和 partition。
序列化: 将消息的键和值序列化为字节数组。
发送消息: 将序列化后的消息发送到指定的 topic 和 partition。
确认和重试: 等待 broker 的确认,并根据配置进行重试(如有需要)。
处理响应: 根据 broker 返回的响应,处理发送结果和错误。
4.4、总结
Kafka 的 producer 是消息的生产者和发送者,负责将数据发布到 Kafka 集群中的 topic。通过配置和优化 producer 的各种参数,可以实现高效的数据发送和可靠性。
5、消费者consumer
Kafka 中的 consumer 是负责从 Kafka 集群中读取和处理消息的组件。它订阅一个或多个 topics,从这些 topics 中读取消息,并根据业务需求进行处理。消费者通常是应用程序的一部分,处理从 Kafka 传递过来的数据。主要特点包括:
1、订阅 Topics: 消费者订阅一个或多个 topics,以便从中获取消息。
2、分区读取: 消费者从分区中读取消息。一个 consumer group 内的消费者可以并行处理消息,每个消费者负责一个或多个分区。
3、偏移量管理: 消费者跟踪已处理消息的偏移量(offset),以便能够从正确的位置继续读取。这些偏移量可以存储在 Kafka 中或外部存储系统中。
4、消费策略: 消费者可以配置为实时消费(处理实时到达的消息)或批量消费(处理一定数量的消息后再进行处理)。
5、负载均衡: 在一个 consumer group 内,多消费者可以共享负载,确保消息的高效处理。
6、消息处理: 消费者应用逻辑处理从 Kafka 中读取的消息,如数据分析、存储或进一步的计算。
6、消费组consumer group
在 Kafka 中,消费组(consumer group) 是一组消费者实例的集合,它们共同处理一个或多个 topics 中的消息。每个消费组被分配独立的消息处理任务,以确保消息的负载均衡和可靠处理。主要特点包括:
1、负载均衡: 每个消费组内的消费者实例会共享处理 topic 中的分区,实现负载均衡。一个 topic 的每个分区只能被消费组中的一个消费者处理,但可以被多个消费组中的消费者处理。
2、消息偏移量: 消费组跟踪每个分区的消费进度(即消息的偏移量),以便在消费者重启或故障恢复时,从正确的位置继续消费。
3、容错性: 当消费组中的某个消费者实例失败时,其他实例可以接管未完成的任务,确保消息处理的可靠性和高可用性。
4、并行处理: 消费组内的多个消费者可以并行处理消息,提高整体处理吞吐量。
5、动态扩展: 可以动态增加或减少消费组中的消费者数量,Kafka 会自动重新分配分区以适应变化。
7、分区partiton
在 Kafka 中,分区(partition) 是 topic 的核心组成部分,是 Kafka 实现数据分布、负载均衡和扩展性的基础。以下是分区的主要概念和功能:
1. 数据分布
分区机制: 每个 topic 可以包含多个分区。分区是 Kafka 存储和管理数据的基本单位。数据在 topic 内部被分散到不同的分区中,以实现负载均衡和高吞吐量。
2. 消息顺序
顺序保证: 在同一个分区内,消息的顺序是有保证的。消费者从分区中读取消息时,会按照消息的写入顺序进行处理。但不同分区之间的消息顺序没有保证。
3. 负载均衡
生产者负载均衡: 生产者将消息发送到 topic 的不同分区,以实现负载均衡。可以根据消息键(key)来决定将消息发送到哪个分区,从而使相关的消息集中在同一个分区内。
消费者负载均衡: 消费者可以并行地从多个分区读取消息。一个 topic 的每个分区只能由一个消费者实例(在同一个消费组内)进行消费,但可以由不同的消费组中的消费者实例读取。
4. 扩展性
水平扩展: 通过增加分区数量,可以水平扩展 Kafka 的存储和处理能力。每个分区可以分布在不同的 broker 上,从而分担负载。
5. 数据复制
副本机制: 每个分区有一个领导副本(leader)和多个跟随副本(follower)。领导副本负责处理所有的读写请求,跟随副本复制领导副本的数据,以实现数据的冗余备份和高可用性。
6. 消息偏移量
偏移量管理: 每个分区内的消息都有一个唯一的偏移量(offset),消费者使用这些偏移量来跟踪已经消费的消息,确保消息的处理不会遗漏或重复。
7. 数据持久化
日志文件: 每个分区的数据会被存储为一组日志文件,这些文件在磁盘上按顺序追加写入。Kafka 的分区机制帮助实现高效的数据存储和读取。
总结
Kafka 的分区机制是其高性能和高可扩展性的关键。通过将数据分散到多个分区,Kafka 能够处理大规模的数据流,并确保高吞吐量和容错能力。分区的设计使得 Kafka 能够有效地支持大规模的数据处理和分布式系统架构。
8、偏移量offset
在 Apache Kafka 中,偏移量(offset) 是一个关键概念,用于标识和跟踪消息在分区中的位置。以下是关于偏移量的详细解释:
1. 定义
偏移量: 偏移量是一个整数,表示消息在 Kafka 分区中的位置。每条消息在一个分区内都有一个唯一的、递增的偏移量。它是消息在分区内的序号,从零开始递增。
2. 作用
消息定位: 消费者使用偏移量来确定从哪里开始读取消息。例如,消费者可以从某个特定的偏移量开始读取,或者从最后提交的偏移量继续读取。
消息跟踪: 偏移量帮助 Kafka 跟踪消息的消费进度。它使消费者能够在重启后继续从上次处理的位置开始消费,避免重复处理消息或丢失消息。
3. 如何工作
生产者: 生产者将消息发送到一个分区,Kafka 自动为每条消息分配一个偏移量。生产者无需关注偏移量的分配,这个过程是由 Kafka 管理的。
消费者: 消费者从分区中读取消息时,会记住每条消息的偏移量。消费者可以通过提交偏移量(通常是指明已经处理到哪个偏移量)来表示消息处理的进度。
4. 偏移量提交
自动提交: Kafka 支持自动提交偏移量的功能,消费者可以设置自动提交间隔,Kafka 会自动记录消费者处理的最新偏移量。
手动提交: 也可以选择手动提交偏移量,消费者在确认处理完成后显式地提交当前的偏移量。这允许更精细的控制,例如在处理消息失败时可以回滚到之前的偏移量。
5. 存储
消费者偏移量存储: Kafka 将消费者的偏移量信息存储在一个名为 __consumer_offsets 的内部 topic 中。这个 topic 用于存储所有消费者组的偏移量信息,以便在重启或故障恢复时可以恢复消费状态。
6. 数据恢复
高可用性: 如果消费者崩溃或出现故障,Kafka 可以通过存储在 __consumer_offsets topic 中的偏移量信息恢复消费者的进度。消费者可以从最后提交的偏移量处继续处理消息,保证数据不会丢失。
7. 性能考虑
偏移量与存储: 虽然偏移量本身是轻量级的,但在高吞吐量的系统中,频繁的提交操作(尤其是在自动提交模式下)可能会对性能产生影响。因此,在高吞吐量场景下,合理配置提交间隔和手动提交策略是很重要的。
总结
偏移量是 Kafka 中用于标识消息在分区中的位置的关键机制。它确保了消息的有序消费,并提供了消费者进度跟踪和恢复的能力。通过管理偏移量,Kafka 实现了可靠的消息传递和高效的数据处理。
9、Replica副本
在 Apache Kafka 中,副本(Replica) 是一个重要的概念,用于实现数据的高可用性和容错性。以下是关于 Kafka 中副本的详细解释:
9.1、定义
副本(Replica): 副本是 Kafka 分区的一个完整拷贝,用于保证数据的持久性和容错能力。每个分区可以有多个副本,每个副本都保存该分区的完整数据。
9.2、主副本与从副本
主副本(Leader Replica): 在每个分区中,只有一个副本被选为主副本。主副本负责处理所有的读写请求。所有的生产者和消费者与主副本交互,读写操作都由主副本处理。
从副本(Follower Replica): 其余的副本都是从副本。它们从主副本同步数据,但不直接处理客户端的读写请求。主要任务是从主副本中获取最新的数据并保持同步,以便在主副本失败时可以接管。
9.3、 副本的工作机制
数据复制: 当生产者将消息发送到 Kafka 分区时,这些消息首先被写入到主副本。主副本将这些消息复制到所有的从副本,以保证数据的一致性和可用性。
同步与异步复制: 从副本的复制可以是同步的,也可以是异步的。同步复制意味着主副本在消息被所有从副本确认写入后才认为写入成功;异步复制则意味着主副本在消息被写入后立即返回成功,而从副本会在稍后时间同步数据。
9.4、副本的状态
ISR(In-Sync Replicas): ISR 是指当前与主副本保持同步的副本集合。只有在 ISR 中的副本才被认为是完全同步的,这些副本可以在主副本失败时迅速接管。
Non-ISR 副本: 这些副本未能及时跟上主副本的数据更新,可能因为网络延迟或其他问题。在主副本故障时,这些非 ISR 副本不能立即接管。
9.5、副本的容错与高可用性
主副本故障转移: 如果主副本发生故障,Kafka 会选择一个 ISR 中的从副本作为新的主副本,以保证数据的持续可用性。选举新主副本的过程是自动的。
副本的恢复: 当故障的主副本恢复后,它会成为一个从副本,重新加入到分区的副本集合中,并从新的主副本同步数据。
9.6、副本配置
副本数(Replication Factor): Kafka 分区的副本数是一个配置项,通常在创建 topic 时指定。副本数决定了每个分区有多少个副本,影响到数据的持久性和容错能力。副本数越多,系统的容错能力越强,但也会增加存储和网络负担。
9.7、副本的管理
副本分配: Kafka 使用分区的副本分配策略来分配主副本和从副本。这些策略旨在优化负载均衡和故障恢复能力,确保副本在集群中的分布合理。
副本的监控与管理: Kafka 提供了监控工具和管理接口,以帮助运维人员跟踪副本的状态,处理副本同步问题,并进行故障恢复。
9.8、总结
在 Kafka 中,副本机制是确保数据高可用性和容错性的核心部分。通过主副本和从副本的设计,Kafka 能够在分区级别实现数据冗余,保证即使出现节点故障,系统也能继续正常运行。这种机制增强了 Kafka 的可靠性和数据持久性,适合用于大规模的数据流处理和实时数据传输场景。
10、ISR副本
11、LEO(日志末端偏移量)
表示下一条消息该写入的位置
12、HW(High Watermark)高水平值
13、ISR副本、LEO(日志末端偏移量)、HW(High Watermark)高水平值三者之间的关系