什么是 Kafka?
Apache Kafka 是一种分布式数据存储,经过优化以实时提取和处理流数据。流数据是指由数千个数据源持续生成的数据,通常可同时发送数据记录。流平台需要处理这些持续流入的数据,按照顺序逐步处理。
Kafka 为其用户提供三项主要功能:
- 发布和订阅记录流
- 按照记录的生成顺序高效地存储记录流
- 实时处理记录流
Kafka 主要用于构建适应数据流的实时流数据管道和应用程序。它结合了消息收发、存储和流处理功能,能够存储历史和实时数据。
Kafka 有何作用?
Kafka 用于构建实时流数据管道和实时流应用程序。数据管道在不同系统之间可靠处理和移动数据,而流应用程序是消耗数据流的应用程序。例如,如果您要创建获取用户活动数据的数据管道以实时追踪人们如何使用您的网站,Kafka 将可在使支持数据管道的应用程序完成读取操作的同时,用于提取和存储流数据。Kafka 还经常用作消息代理解决方案,充当平台来处理和调解两个应用程序之间的通信。
Kafka 的工作原理
Kafka 结合了两种消息收发模型、列队和发布-订阅,以向客户提供其各自的主要优势。通过列队可以跨多个使用器实例分发数据处理,因此具有很高的可扩展性。但是,传统队列不支持多订阅者。发布-订阅方法支持多订阅者,但是由于每条消息传送给每个订阅者,因此无法用于跨多个工作进程发布工作。Kafka uses 使用分区日志模型将这两种解决方案融合在一起。日志是一种有序的记录,这些日志分成区段或分区,分别对应不同的订阅者。这意味着,同一个主题可有多个订阅者,分别有各自的分区以获得更高的可扩展性。最后,Kafka 的模型带来可重放性,允许多个相互独立的应用程序从数据流执行读取以便按自己的速率独立地工作。
列队
发布-订阅
Kafka 的方法有哪些优点?
可扩展
Kafka 的分区日志模型允许跨多个服务器分发数据,使其可扩展性超越了在单服务器上应用的情况。
速度快的
Kafka 可解耦数据流,因此延迟非常低,速度极快。
持久
分区可以跨多个服务器分发和和复制,数据全都写入到磁盘。这有助于防止服务器发生故障,使数据获得出色的容错能力和耐久性。
Kafka 的架构如何集成不同的模型?
Kafka 通过将记录发布到不同的主题来调解两种不同的模型。每个主题都有一个分区日志,这是一种结构化提交日志,能够按顺序跟踪所有记录,并实时附加新记录。这些分区跨多个服务器分发和复制,从而获得高可扩展性、容错能力和并行机制。每个使用器都可在主题中获得一个分区,从而支持多订阅者,同时保持数据的顺序。通过结合这些消息收发模型,Kafka 兼具两者的优势。Kafka 还可通过将所有数据写入和复制到磁盘,充当可扩展性和容错能力非常高的存储系统。默认情况下,Kafka 一直保留磁盘上存储的数据,直到其空间用尽,但是用户可以设置保留限制。Kafka 有四种 API:
- 创建器 API:用于将记录流发布到 Kafka 主题。
- 使用器 API:用于订阅主题并处理其记录流。
- 流 API:使应用程序能够像流处理器那样,用于从主题获取输入流,并将其转换为进入不同输出主题的输出流。
- 连接器 API:允许用户无缝地向其当前 Kafka 主题自动添加其他应用程序或数据系统。
Apache Kafka 和 RabbitMQ 之间有什么区别?
RabbitMQ 是一种开源消息代理,使用消息收发队列方法。队列在节点集群中传播,还可以复制,每条消息都只能传送到单个使用器。
特性 |
Apache Kafka |
RabbitMQ |
架构 |
Kafka 使用分区日志模型,结合了消息收发队列和发送-订阅方法。 |
RabbitMQ 使用消息收发队列。 |
可扩展性 |
Kafka 允许跨不同服务器分发分区,因此具有可扩展性。 |
增加队列中的使用器数量可以将处理扩展到竞争使用器。 |
消息保留 |
基于策略,例如消息可以存储一天。用户可以配置此保留窗口。 |
基于确认,表示消息在使用后被删除。 |
多使用器 |
多个使用器可以订阅相同主题,因为 Kafka 允许将同一条消息重放指定的时间长度。 |
多个使用器无法全部接收同一条消息,因为消息在使用后将被删除。 |
复制 |
自动复制主题,但是用户可以手动将主题配置为不复制。 |
消息不会自动复制,但是用户可以手动将其配置为复制。 |
消息排序 |
由于采用了分区日志架构,每个使用器按顺序收到信息。 |
消息按照其到达队列的顺序传送给使用器。如果有竞争使用器,每个使用器都将处理该消息的子集。 |
协议 |
Kafka 通过 TCP 使用二进制协议。 |
高级消息收发队列协议 (AMQP) 及通过插件获得的支持:MQTT、STOMP。 |
AWS 如何支持您的 Kafka 要求?
在此了解更多如何在 AWS 上手动部署 Kafka 的信息。
AWS 还提供了 Amazon MSK,这是 Apache Kafka 可用的兼容性最强且安全的完全托管服务,可让使用器填充数据湖、流化与数据集之间的变化,并推动机器学习和分析应用。通过 Amazon MSK,客户可以花费较少的时间管理基础设施,从而有更多的时间来构建应用程序。 了解有关 Amazon MSK 的更多信息。