- 微信公众号:阿俊的学习记录空间
- 小红书:ArnoZhang
- wordpress:arnozhang1994
- 博客园:arnozhang
- CSDN:ArnoZhang1994
Apache Kafka® 是一个分布式流处理平台,具备以下三大核心功能:
- 记录流的发布和订阅,类似于消息队列或企业消息系统。
- 以容错和持久化的方式存储记录流。
- 实时处理记录流。
Kafka 通常用于两类场景:
- 构建实时数据管道,可靠地在系统或应用之间传输数据。
- 构建实时流处理应用程序,对数据流进行转换或响应。
核心概念
Kafka 以集群形式运行在一个或多个服务器上,并支持跨数据中心部署。集群中,记录流被存储在“主题”(topics)中,每条记录包含一个键(key)、值(value)和时间戳(timestamp)。Kafka 提供四个核心 API:
- Producer API:允许应用将记录流发布到一个或多个主题。
- Consumer API:允许应用订阅一个或多个主题并处理记录流。
- Streams API:支持应用作为流处理器,消费多个主题的输入流并生成输出流。
- Connector API:用于构建生产者或消费者,将 Kafka 主题连接到外部系统,如关系数据库的每次变更。
Kafka 采用简单、高性能且与语言无关的 TCP 协议,支持向后兼容。除了 Java 客户端,Kafka 还支持多种语言客户端。
主题和日志
Kafka 的核心抽象是“主题”,即记录流的类别。一个主题可以被多个消费者订阅,并在集群中维护为分区日志。每个分区是一个有序且不可变的记录序列,且每条记录有唯一的偏移量标识。Kafka 集群持久保存所有已发布的记录,并根据配置的保留策略管理日志。
分布与容错
Kafka 将日志的分区分布到集群的多个服务器上,每个分区可复制到多个服务器,以实现容错。每个分区有一个“主节点”负责处理读写请求,当主节点故障时,从节点接管。
地理复制
Kafka 的 MirrorMaker 支持跨数据中心或云区域的地理复制,可用于数据备份或本地化需求。
生产者与消费者
生产者向指定的主题发布数据,并决定将记录分配到哪个分区。消费者通过消费者组名标记自己,主题的每条记录会发送给消费者组中的一个实例。
多租户与资源控制
Kafka 支持多租户,通过配置来控制哪些主题可以产生或消费数据。管理员还可以设置请求配额,以控制客户端的资源使用。
保证
Kafka 提供以下重要的保证:
- 生产者发送到特定主题分区的消息将按顺序追加到日志中。
- 消费者实例按日志中的存储顺序接收记录。
- 对于复制因子为 N 的主题,Kafka 可在最多 N-1 个服务器故障时不丢失已提交的记录。
Kafka 的多功能性
Kafka 同时具备队列和发布-订阅模式的功能。每个主题既支持负载均衡的处理,也支持多订阅者的扩展。Kafka 的消费者组概念实现了队列和发布-订阅模式的结合,使其既能进行并行处理,又能保持记录顺序。
Kafka 作为存储系统
Kafka 的数据持久性由磁盘存储和复制保证,能高效处理从 50KB 到 50TB 的数据。Kafka 不仅充当传输中的消息存储系统,还能以高性能、低延迟存储日志,提供类似分布式文件系统的功能。
Kafka 作为流处理平台
Kafka 的流处理器能够从输入主题中连续读取数据,进行处理并输出到目标主题。Kafka 提供的 Streams API 支持构建复杂的流处理应用,能够处理乱序数据、执行状态计算等复杂任务。
使用场景
Kafka 具有广泛的应用场景,包括:
- 消息传递:替代传统消息代理系统,具备高吞吐量、分区、复制和容错功能,适合大规模消息处理。
- 网站活动跟踪:用于构建用户活动跟踪管道,将数据实时发布到中心主题,供后续处理或分析。
- 度量指标:汇聚分布式应用的运行数据,提供集中的操作数据流。
- 日志聚合:抽象服务器日志数据为消息流,支持低延迟处理和多源数据聚合。
- 流处理:用于流水线中的多阶段数据处理,将原始数据转化为后续使用的新数据。
- 事件溯源:记录系统状态变化,为事件驱动应用设计提供支持。
- 提交日志:用作分布式系统的外部提交日志,帮助节点之间的数据复制。