Apache Kafka - 集群架构2025年1月23日 | 阅读 15 分钟 ![]() 1. 代理(Brokers)Kafka 集群由多个称为代理(brokers)的服务器组成。每个代理都由一个独特的 ID 标识,负责存储和管理数据、处理客户端请求以及在集群中复制数据。代理协同工作以提供一个分布式、容错且可扩展的系统。代理构成 Kafka 架构的核心,确保数据可靠存储并高效检索。 2. 主题(Topics)和分区(Partitions)
分区通过分担负载,使 Kafka 能够处理大规模数据流。分区中的每条记录都分配有一个唯一的偏移量,作为其标识符并确保记录的顺序得到维护。 3. 生产者(Producers)生产者是向 Kafka 主题发布数据的客户端应用程序。它们可以根据键将数据发送到特定的分区,确保具有相同键的记录进入同一分区。此功能对于维护相关记录的顺序至关重要。生产者被设计为高效,支持各种确认配置以确保数据可靠性。例如,生产者可以等待所有同步副本的确认,然后才认为记录已成功写入。 4. 消费者(Consumers)消费者是能够从 Kafka 主题读取信息的客户端应用程序。它们被组织成消费者组,每个组充当一个逻辑订阅者。在一个组内,每个分区仅由一个消费者消费,从而实现并行数据处理,同时确保每条记录只处理一次。这种客户组机制通过分发职责来提升 Kafka 处理大量信息的能力。 5. ZooKeeperZooKeeper 是 Kafka 用于管理和协调代理的集中式服务。它处理关键任务,例如维护代理的元数据、管理配置、执行分区的领导者选举以及跟踪集群的健康状况。ZooKeeper 确保 Kafka 能够动态适应变化,例如代理故障,而不会丢失数据。 1. 设置 Kafka 集群前提条件在开始设置 Kafka 集群之前,请确保您拥有以下内容
分步设置下载 Kafka从官方 Apache Kafka 网站获取最新的 Kafka 二进制文件。在您希望运行 Kafka 代理的每台服务器上解压存档。 配置 Zookeeper 确保 Zookeeper 已启动并运行。Kafka 需要一个正在运行的 Zookeeper 实例才能启动。 创建一个包含以下基本配置的 zoo.cfg 文件 在每个节点上启动 Zookeeper 配置 Kafka 代理 每个 Kafka 代理都需要一个唯一的配置文件。复制默认配置文件并为每个代理进行自定义。 为每个代理重复此操作,确保每个 broker.id 和 listeners 设置都是唯一的。 启动 Kafka 代理 使用自定义配置文件启动每个 Kafka 代理。 在每台服务器上使用各自的配置文件重复此命令。 验证集群 启动所有代理后,检查组是否正常工作。使用 Kafka 命令行工具列出主题并检查集群状态。 2. 代理配置和设置正确配置 Kafka 代理对于最佳性能和可靠性至关重要。在此,我们将介绍 Kafka 代理配置文件 (server.properties) 中最重要的设置。 基本设置1. broker.id:集群中每个代理的唯一标识符。它必须在所有代理中唯一。 2. listeners:指定代理侦听的主机名和端口。确保每个代理都是唯一的。 3. log.dirs:Kafka 存储其日志文件的目录。它可以是逗号分隔的目录列表,以获得更好的性能。 4. zookeeper.connect:Zookeeper 连接字符串。这是逗号分隔的 Zookeeper 服务器地址列表。 性能调优1. num.network.threads:处理网络请求的线程数。如果代理正在处理许多客户端连接,请增加此值。 2. num.io.threads:用于磁盘 I/O 操作的线程数。将其设置为磁盘数量或更高,以提高性能。 3. socket.send.buffer.bytes 和 socket.receive.buffer.bytes:TCP 发送和接收缓冲区的大小。 4. log.retention.hours:保留日志段的持续时间。根据您的数据保留策略设置此值。 5. log.segment.bytes:单个日志段文件的最大大小。根据存储容量和性能需求进行调整。 可靠性和持久性1. replication.factor:自动创建主题的默认复制因子。确保此值足够高以容忍代理故障。 2. min.insync.replicas:必须确认写入才能被视为成功的最小副本数。此设置确保数据持久性。 3. unclean.leader.election.enable:控制是否允许不干净的领导者选举。不干净的选举可能导致数据丢失,但可能会提高可用性。 安全设置1. listeners:使用 SSL 等安全协议定义侦听器。 2. ssl.keystore.location 和 ssl.keystore.password:配置代理的 SSL 密钥库位置和密码。 3. ssl.truststore.location 和 ssl.truststore.password:配置代理的 SSL 信任库位置和密码。 4. ssl.client.auth:配置客户端身份验证。 监控和管理1. metrics.recording.level:设置指标记录的详细级别。 2. jmx.port:为 Kafka 启用 JMX 监控。 3. log.retention.check.interval.ms:检查日志保留的频率。 3. Zookeeper 在 Kafka 集群管理中的作用Apache Kafka 在各种集群管理任务上严重依赖 Zookeeper。Zookeeper 的作用对于维护 Kafka 集群的整体健康和稳定性至关重要。 以下是 Zookeeper 如何支持 Kafka 的详细介绍 集群元数据管理Zookeeper 维护 Kafka 集群的元数据,其中包括有关代理、主题和分区的信息。它存储
领导者选举Zookeeper 处理分区的领导者选举过程。当领导者代理失败时,Zookeeper 协调在同步副本中选举一个新的领导者。这确保始终有领导者可用以处理客户端请求,从而维护分区的可用性。 配置管理Kafka 使用 Zookeeper 存储和管理代理和主题的配置信息。这允许动态更新配置,而无需重新启动代理。Zookeeper 管理的配置数据包括
健康监测Zookeeper 持续监控 Kafka 代理的健康状况。它跟踪每个代理的状态并检测故障。如果代理失败,Zookeeper 会迅速将其从集群的元数据中删除,触发分区重新分配和领导者选举过程。 配额管理Kafka 使用 Zookeeper 管理生产者和消费者的配额。配额控制数据生产和消费的速率,防止任何单个客户端使集群过载。Zookeeper 存储并强制执行这些配额设置。 安全和 ACLZookeeper 管理 Kafka 的访问控制列表 (ACL)。ACL 用于控制哪些用户和应用程序可以对主题和代理执行特定操作。Zookeeper 存储这些 ACL 并强制执行访问控制策略,从而增强 Kafka 集群的安全性。 Zookeeper for Kafka 的设置和配置1. 下载 Zookeeper 从官方 Apache Zookeeper 网站获取最新版本的 Zookeeper。在您希望运行 Zookeeper 节点的每台服务器上解压存档。 2. 创建配置文件 创建一个包含必要设置的 zoo.cfg 文件。将此文件放在 Zookeeper 安装的 conf 目录中。 3. 设置数据目录 在每台服务器上创建 zoo.cfg 中指定的数据目录。 4. 启动 Zookeeper 使用以下命令在每个节点上启动 Zookeeper 5. 验证 Zookeeper 集群 检查 Zookeeper 节点的状态,确保它们正确连接并形成法定人数。 Kafka 集群架构Apache Kafka 是一个分布式事件流平台,专为高吞吐量和低延迟消息传递而设计。了解 Kafka 的集群架构对于高效管理和利用其功能至关重要。 本指南深入探讨了构成 Kafka 架构的核心组件和机制,包括 Kafka 代理、主题和分区、数据复制和容错、数据分发和负载平衡以及代理和分区领导力。 ![]() Kafka 代理:概述Kafka 代理是处理消息容量、分发和检索的服务器。每个代理负责维护消息日志、处理客户端请求并确保数据复制。代理在集群中协同工作以提供容错性和高可用性。
代理配置每个代理都使用属性文件(例如 server.properties)进行配置。关键配置参数包括
server.properties 示例: 启动 Kafka 代理要启动 Kafka 代理,请使用以下命令 此命令使用指定的配置初始化代理,并将其连接到 Zookeeper 集群进行元数据管理。 Kafka 主题和分区Kafka 主题 Kafka 中的主题是用于组织和分类消息的逻辑通道。生产者将消息发布到主题,消费者订阅主题以接收消息。
创建主题的示例 分区 分区是 Kafka 中并行性和可扩展性的基本单位。每个主题被划分为多个分区,这允许 Kafka 分担负载并横向扩展。
数据复制Kafka 通过在多个代理之间复制分区来确保容错性。复制因子决定了每个分区的副本数量。
配置复制因子为 3 的主题示例 容错性
数据分发Kafka 将数据分发到分区以平衡负载并确保高效的数据检索。
具有自定义分区的生产者示例 负载均衡
代理领导力
分区领导力
检查分区领导力的示例 此命令提供有关分区领导者及其副本的详细信息。 示例程序生产者示例 以下是一个 Kafka 生产者发送消息到主题的 Java 示例 示例输出 ![]() 消费者示例 以下是一个 Kafka 消费者从主题读取消息的 Java 示例 输出 ![]() 这些示例说明了如何设置基本的 Kafka 生产者和消费者。对于更高级的配置,例如自定义分区器、序列化器和复杂的消费者组管理,请参阅官方 Kafka 文档和相关 API 参考。 Kafka 内部原理了解 Kafka 的内部原理,包括消息存储、日志管理、数据保留策略、索引、段文件以及压缩和序列化机制,对于优化 Kafka 性能和确保数据可靠性至关重要。 ![]() 消息存储和日志管理Kafka 将消息存储在分布式日志中,其中每个主题都分为多个分区。每个分区是一个有序、不可变的消息序列,持续附加到提交日志中。
数据保留和清理策略Kafka 根据可配置的保留策略保留消息,这些策略决定消息存储多长时间或它们占用多少空间。
索引和段文件Kafka 维护索引文件以快速定位日志段中的消息。
压缩和序列化Kafka 支持各种压缩和序列化程序,以增强容量和组织使用。压缩:生产者可以在将消息发送到 Kafka 之前对其进行压缩。支持的压缩类型包括 GZIP、Snappy、LZ4 和 ZSTD。压力减少了通过组织传输和存储在板上的数据量,从而进一步提高了执行力。 compression.type=gzip # 选项:none, gzip, snappy, lz4, zstd 序列化:Kafka 要求消息序列化为字节数组。常见的序列化格式包括
压缩和序列化的生产者配置示例 案例研究和最佳实践Apache Kafka 在各行各业广泛应用于实时数据流、事件溯源和高吞吐量消息系统。本节将探讨 Kafka 集群部署的真实案例、维护 Kafka 集群的最佳实践以及常见的陷阱。 ![]() Kafka 集群部署的真实案例 1. LinkedIn用例:Kafka 的创建者 LinkedIn 广泛使用它进行实时分析和监控。Kafka 每天处理数万亿条消息,跨越数千个 Kafka 代理。 部署策略
2. Uber用例:Uber 依靠 Kafka 进行实时事件处理,并支持其复杂的、数据驱动的基础设施。Kafka 每天处理数十亿条消息,用于各种应用程序,包括乘车匹配、欺诈检测和用户活动跟踪。 部署策略
3. Netflix用例:Netflix 使用 Kafka 进行数据管道管理、实时分析和监控。Kafka 帮助 Netflix 管理其流媒体服务产生的大量数据。 部署策略
维护 Kafka 集群的最佳实践1. 集群规划和设置
2. Zookeeper 配置
3. 代理配置和管理
4. 主题和分区管理
下一个主题Apache-kafka-幂等生产者 |
我们请求您订阅我们的新闻通讯以获取最新更新。