如果当前控制器出现故障,ZooKeeper 会快速选择一个新的控制器来接管。尽管ZooKeeper一直是 Kafka 架构的重要组成部分,但 Kafka 正在转向新的 KRaft 模式,该模式消除了对 ZooKeeper 的需求。 ZooKeeper是一个独立的开源项目,并不是原生的Kafka组件。
制片人
Kafka 生产者是一种客户端应用程序,充当 Kafka 的数据源,使用与代理的持久 TCP 连接将日志发布到一个或多个 Kafka 主题。
多个生产者可以同时向同一主题发送日志。 Kafka主题是仅追加的,但生产者 土耳其电话数据 和消费者都不能修改或删除现有记录,从而确保数据不变性。
消费者
Kafka 消费者是一种客户端应用程序,它订阅一个或多个 Kafka 主题来消费日志流。消费者通常在消费者组中工作,其中读取和处理记录的负载分布在多个消费者之间。
每个消费者通过维护偏移量来跟踪其流中的进度,确保没有数据被处理两次并且没有未处理的记录丢失。 Kafka 消费者充当数据管道中的最后一步,其中日志被处理或转发到下游系统。
Apache Kafka架构图
Apache Kafka 架构图(作者提供)
8. Kafka 中日志压缩的主要目标是什么?日志压缩如何影响Kafka消费者的性能?
Kafka 中日志压缩的主要目标是保留主题注册表中每个唯一键的最新值,确保保留数据的最新状态并减少存储使用。这使得消费者能够更有效地访问当前值,而无需处理旧的重复项。
与 Kafka 的传统保留策略(在一定时间后删除消息)不同,日志压缩仅删除每个键的最旧记录,保留该键的最新值。此功能有助于确保消费者始终能够访问当前状态,维护紧凑的注册表以实现更高的存储效率和更快的搜索。
9. Kafka集群中的分区和副本有什么区别?
分区和副本是Kafka架构的关键组件,确保性能和容错能力。分区通过允许主题拆分为多个部分来提高性能,允许消费者并行地从不同分区读取数据,从而提高 Kafka 的可扩展性和效率。
另一方面,副本通过在多个代理上创建分区副本来提供冗余。这确保了容错能力,因为如果领导者代理(管理分区的读写操作的代理)发生故障,可以将追随者副本之一提升为新领导者的角色。
Kafka 维护每个分区的多个副本,以确保数据的高可用性和持久性,最大限度地降低故障期间数据丢失的风险,尽管整体持久性取决于复制配置。