快速了解Kafka
Kafka 是一种分布式流处理平台,广泛应用于实时数据管道和流处理应用。以下是一些 Kafka 中的关键名词和概念:
1. Broker
- Broker 是 Kafka 集群中的一个服务器节点,负责存储和传递消息。每个 Broker 可以处理多个分区的读写请求。
2. Topic
- Topic 是消息的逻辑分类,生产者将消息发送到特定的 Topic,消费者从 Topic 中读取消息。一个 Topic 可以分为多个分区(Partition)。
3. Partition
- Partition 是 Topic 的物理分区,每个 Partition 是一个有序的、不可变的消息序列。分区允许 Kafka 水平扩展,提高并行处理能力。
4. Producer
- Producer 是向 Kafka Topic 发送消息的客户端应用程序。生产者将消息发布到一个或多个 Topic 的特定分区。
5. Consumer
- Consumer 是从 Kafka Topic 读取消息的客户端应用程序。消费者可以订阅一个或多个 Topic,并从分区中拉取消息。
6. Consumer Group
- Consumer Group 是一组消费者的集合,共同消费一个 Topic 的消息。组内的每个消费者负责消费一个或多个分区的消息,Kafka 会自动平衡组内消费者的负载。
7. Offset
- Offset 是消息在分区中的唯一标识符,表示消息在分区中的位置。消费者通过维护自己的 Offset 来跟踪已经消费的消息。
8. Replication
- Replication 是 Kafka 提供的高可用性机制。每个 Partition 可以有多个副本(Replica),其中一个副本是 Leader,负责处理读写请求,其他副本是 Follower,用于数据备份。
9. Leader 和 Follower
- Leader 是 Partition 的主副本,负责处理所有的读写请求。
- Follower 是 Partition 的从副本,从 Leader 复制数据,并在 Leader 失效时接管成为新的 Leader。
10. Zookeeper
- Zookeeper 是 Kafka 依赖的分布式协调服务,用于管理 Broker、Topic、Partition 的元数据,以及进行 Leader 选举和消费者组的协调。
11. Commit Log
- Commit Log 是 Kafka 存储消息的底层数据结构,所有消息都按顺序追加到日志中,确保消息的持久性和顺序性。
12. ISR (In-Sync Replicas)
- ISR 是与 Leader 保持同步的副本集合。只有 ISR 中的副本才有资格在 Leader 失效时被选举为新的 Leader。
13. Kafka Streams
- Kafka Streams 是一个用于构建流处理应用程序的库,允许开发者直接从 Kafka Topic 中读取数据,进行处理,并将结果写回 Kafka 或其他外部系统。
14. Kafka Connect
- Kafka Connect 是一个用于在 Kafka 和其他系统之间进行数据导入导出的工具。它提供了可扩展的 API 和插件机制,支持与各种数据源和数据汇的集成。
15. Schema Registry
- Schema Registry 是一个用于管理消息模式的服务,确保生产者和消费者使用兼容的消息格式。它通常与 Avro 等序列化格式一起使用。
16. Log Compaction
- Log Compaction 是 Kafka 的一种数据清理策略,保留每个键的最新值,删除旧值。适用于需要保存最新状态的场景,如数据库变更日志。
17. Retention Policy
- Retention Policy 定义了 Kafka 中消息的保留时间或大小限制。超过保留策略的消息会被自动删除。
18. Kafka MirrorMaker
- Kafka MirrorMaker 是一个用于在不同 Kafka 集群之间复制数据的工具,常用于跨数据中心的数据同步。
这些概念是理解和使用 Kafka 的基础,掌握它们有助于更好地设计和优化基于 Kafka 的流处理系统。
例子
Kafka 应用场景:实时日志处理系统
假设我们有一个大型的电子商务平台,每天有数百万用户访问并生成大量的日志数据(如用户行为日志、交易日志、系统日志等)。为了实时监控系统状态、分析用户行为、检测异常等,我们需要构建一个实时日志处理系统。Kafka 在这个场景中扮演了核心角色。
场景描述:
- 日志生成:用户在平台上进行各种操作(如浏览商品、下单、支付等),这些操作会生成大量的日志数据。
- 日志收集:日志数据需要被实时收集并传输到中央处理系统。
- 日志处理:收集到的日志数据需要进行实时处理,如过滤、聚合、分析等。
- 存储与查询:处理后的数据需要存储到数据库或数据仓库中,供后续查询和分析使用。
Kafka 在其中的用途:
1. Broker
- 用途:Kafka Broker 集群负责接收、存储和传递日志数据。每个 Broker 可以处理多个分区的读写请求,确保系统的高可用性和扩展性。
- 举例:假设我们有 3 个 Broker 组成的 Kafka 集群,日志数据会被均匀分布到这些 Broker 上,确保负载均衡和高可用性。
2. Topic
- 用途:不同的日志类型可以发布到不同的 Topic 中。例如,用户行为日志可以发布到
user_behavior
Topic,交易日志可以发布到transaction
Topic。 - 举例:
user_behavior
Topic 用于存储用户浏览、点击等行为日志,transaction
Topic 用于存储订单、支付等交易日志。
3. Partition
- 用途:每个 Topic 可以分为多个 Partition,以提高并行处理能力。例如,
user_behavior
Topic 可以分为 10 个 Partition,每个 Partition 存储一部分用户行为日志。 - 举例:Partition 0 存储用户 A 的行为日志,Partition 1 存储用户 B 的行为日志,依此类推。
4. Producer
- 用途:日志生成器(如 Web 服务器、移动应用)作为 Producer,将日志数据发送到 Kafka Topic 中。
- 举例:Web 服务器在用户每次浏览商品时,将浏览日志发送到
user_behavior
Topic 的相应 Partition 中。
5. Consumer
- 用途:日志处理系统作为 Consumer,从 Kafka Topic 中读取日志数据进行实时处理。
- 举例:实时分析系统从
user_behavior
Topic 中读取日志数据,进行用户行为分析,如计算每个用户的浏览时长、点击次数等。
6. Consumer Group
- 用途:多个 Consumer 可以组成一个 Consumer Group,共同消费一个 Topic 的消息,实现负载均衡和高吞吐量。
- 举例:假设我们有 5 个 Consumer 组成的 Consumer Group,每个 Consumer 负责消费
user_behavior
Topic 中的 2 个 Partition,确保日志数据被高效处理。
7. Offset
- 用途:Consumer 通过维护 Offset 来跟踪已经消费的消息,确保不会重复消费或丢失消息。
- 举例:Consumer 在处理完 Partition 0 的第 100 条消息后,将 Offset 更新为 100,下次从第 101 条消息开始消费。
8. Replication
- 用途:每个 Partition 有多个副本,确保数据的高可用性和容错性。
- 举例:
user_behavior
Topic 的 Partition 0 有 3 个副本,分别存储在 3 个不同的 Broker 上,即使一个 Broker 宕机,数据仍然可用。
9. Leader 和 Follower
- 用途:Leader 负责处理读写请求,Follower 从 Leader 复制数据,确保数据的一致性。
- 举例:Partition 0 的 Leader 在 Broker 1 上,Follower 在 Broker 2 和 Broker 3 上,所有读写请求都由 Broker 1 处理。
10. Zookeeper
- 用途:Zookeeper 用于管理 Kafka 集群的元数据,如 Broker、Topic、Partition 的信息,以及进行 Leader 选举和消费者组的协调。
- 举例:当 Broker 1 宕机时,Zookeeper 会选举 Broker 2 上的 Follower 作为新的 Leader,确保 Partition 0 的可用性。
11. Commit Log
- 用途:Kafka 使用 Commit Log 来存储消息,确保消息的持久性和顺序性。
- 举例:所有用户行为日志按顺序追加到
user_behavior
Topic 的 Commit Log 中,确保日志的顺序性和完整性。
12. ISR (In-Sync Replicas)
- 用途:ISR 是与 Leader 保持同步的副本集合,确保数据的一致性和高可用性。
- 举例:Partition 0 的 ISR 包括 Broker 1、Broker 2 和 Broker 3,只有这些副本才有资格在 Leader 失效时被选举为新的 Leader。
13. Kafka Streams
- 用途:Kafka Streams 用于构建实时流处理应用程序,如实时计算用户行为指标。
- 举例:使用 Kafka Streams 实时计算每个用户的浏览时长、点击次数等指标,并将结果存储到数据库中。
14. Kafka Connect
- 用途:Kafka Connect 用于将 Kafka 与其他系统集成,如将处理后的日志数据存储到 Elasticsearch 或 Hadoop 中。
- 举例:使用 Kafka Connect 将
user_behavior
Topic 中的日志数据导入到 Elasticsearch 中,供实时搜索和分析使用。
15. Schema Registry
- 用途:Schema Registry 用于管理消息模式,确保生产者和消费者使用兼容的消息格式。
- 举例:使用 Avro 格式序列化日志数据,并通过 Schema Registry 管理 Avro 模式,确保日志数据的一致性和兼容性。
16. Log Compaction
- 用途:Log Compaction 用于保留每个键的最新值,删除旧值,适用于需要保存最新状态的场景。
- 举例:在
transaction
Topic 中,使用 Log Compaction 保留每个订单的最新状态,删除旧的状态更新。
17. Retention Policy
- 用途:Retention Policy 定义了 Kafka 中消息的保留时间或大小限制,确保不会无限期存储数据。
- 举例:设置
user_behavior
Topic 的 Retention Policy 为 7 天,超过 7 天的日志数据会被自动删除。
18. Kafka MirrorMaker
- 用途:Kafka MirrorMaker 用于在不同 Kafka 集群之间复制数据,常用于跨数据中心的数据同步。
- 举例:使用 Kafka MirrorMaker 将生产环境的日志数据复制到测试环境的 Kafka 集群中,供测试和分析使用。
通过以上例子,我们可以看到 Kafka 在实时日志处理系统中的广泛应用,从日志的收集、存储、处理到最终的存储和分析,Kafka 提供了高效、可靠、可扩展的解决方案。
Kafka中的Controller Broker
https://jiamaoxiang.top/2020/07/06/Kafka的Controller-Broker是什么/
控制器组件(Controller),是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。
在分布式系统中,通常需要有一个协调者,该协调者会在分布式系统发生异常时发挥特殊的作用。在Kafka中该协调者称之为控制器(Controller),其实该控制器并没有什么特殊之处,它本身也是一个普通的Broker,只不过需要负责一些额外的工作(追踪集群中的其他Broker,并在合适的时候处理新加入的和失败的Broker节点、Rebalance分区、分配新的leader分区等)。值得注意的是:Kafka集群中始终只有一个Controller Broker。
Controller Broker 如何被选出来?
Broker 在启动时,会尝试去 ZooKeeper 中创建 /controller 节点。Kafka 当前选举控制器的规则是:第一个成功创建 /controller 节点的 Broker 会被指定为控制器。
Controller Broker的具体作用是什么
Controller Broker的主要职责有很多,主要是一些管理行为,主要包括以下几个方面:
- 创建、删除主题,增加分区并分配leader分区
- 集群Broker管理(新增 Broker、Broker 主动关闭、Broker 故障)
- preferred leader选举
- 分区重分配