Apache Kafka 是一个热门的事件流处理平台,用于收集、处理和存储流式事件数据或没有明确开始或结束的数据。Kafka 让新一代分布式应用得以实现,此类应用能够将规模扩大到每分钟处理数十亿个流式事件。
在 Apache Kafka 和 Google Cloud Pub/Sub 等事件流处理系统面世之前,数据处理通常是通过周期性批量作业进行的,即先存储原始数据,然后以任意时间间隔进行处理。例如,电信公司可能会在一天、一周或一个月结束时,才会对数百万条通话记录进行分析,计算出累计费用。
批处理的局限性之一在于它不是实时的。越来越多的组织希望能够实时分析数据,以便在重要的事情发生时及时做出业务决策并采取行动。例如,上面提到的电信公司可能会受益于让客户实时了解收费情况的服务,因为可借此提升整体客户体验。
这就是事件流的意义所在。事件流是连续不断地处理无限数据流(自其创建之时起)的过程,事件流可以捕获数据的时间价值,有助于创建基于推送的应用,以便在重要事情发生时及时采取行动。事件流的示例包括持续分析由面向客户的 Web 应用产生的日志文件、在用户浏览电子商务网站时监控和响应客户行为、通过分析社交网络产生的点击流数据的变化来持续把握客户情绪,或者收集和响应物联网 (IoT) 设备产生的遥测数据。
了解 Google Cloud Managed Service for Apache Kafka,该服务可自动执行 Kafka 操作并保证安全性,并可轻松将数据流式传输到 BigQuery。
了解 Confluent Cloud 在 Google Cloud 上的全托管式集成产品 Apache Kafka。
准备好开始了吗?新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。
Kafka 采用流式数据,能够准确记录何时发生了什么。此记录称为不可变的提交日志。它不可变更,因为它可以被附加,但不能以其他方式改变。在这里,您可以订阅日志(访问数据),也可以从任意数量的流式实时应用以及其他系统向其发布数据(添加更多数据)。
例如,您可以使用 Kafka 获取网站上的所有交易数据流,以便为实时跟踪产品销售情况的应用提供数据,将其与有货产品数量进行比较,从而实现实时库存补充。
Kafka 采用开源形式
这意味着它的源代码免费提供,任何人都可以出于任何目的获取、修改和发布自己的版本。Kafka 没有许可费或其他限制,它由一个全球性开发者社区群策群力对其进行支持和改进。因此,Kafka 提供了各种连接器、插件、监控工具和配置工具,推动着生态系统不断发展。
规模和速度
Kafka 不仅可以随着数据量的不断增加而扩容,而且可以在整个企业中实时提供这些数据。用作分布式平台的也是 Kafka 的一大优势。这意味着处理过程被分配给多台机器(物理或虚拟)。这有两个优势:在处理某些工作时,它可以横向扩容,即在需要更多处理能力或存储空间时增加机器数量,同时它也非常可靠,因为即使个别机器发生故障,整个平台仍然能平稳运行。然而,Kafka 的这一特性可能很难进行大规模管理。
尽管 Kafka 具有许多优点,但要部署这项技术仍然很有挑战性。本地 Kafka 集群在生产环境中很难设置、扩缩和管理。在搭建本地基础设施以运行 Kafka 时,您需要预配机器并配置 Kafka。您还必须设计分布式机器集群以保证可用性、确保数据的存储和安全、设置监控,并谨慎地扩缩数据以支持负载变化。然后,您必须维护基础设施,在机器出现故障时更换机器,并进行例行修补和升级。
另一种方法是将 Kafka 用作云中的托管式服务。第三方供应商负责预配、构建和维护 Kafka 基础设施。您负责构建及运行应用。这使您无需具备特定的 Kafka 基础设施管理专业知识就能轻松部署 Kafka,减少在管理基础设施上耗费的时间,把更多时间投入到创造业务价值上。
Kafka 通过以下五个核心功能实现流式事件处理:
发布
数据源可以将数据事件流发布到或放入一个或多个 Kafka 主题,或类似的数据事件分组中。例如,您可以从 IoT 设备(例如网络路由器)获取数据流,然后将其发布到进行预测性维护的应用中,以计算该路由器何时可能发生故障。
使用
应用可以订阅一个或多个 Kafka 主题,从中获取数据,并处理生成的数据流。例如,应用可以从多个社交媒体流中获取数据,并对其进行分析,以确定关于一个品牌的在线对话的基调。
流程
Kafka Streams API 可以作为流处理器,使用从一个或多个主题传入的数据流,并生成向一个或多个主题传出的数据流。
连接
您还可以构建可重复使用的提供方或使用方连接,以将 Kafka 主题与现有应用关联。现已提供了数百个连接器,包括连接 Dataproc、BigQuery 等关键服务的连接器。
商店
Apache Kafka 可提供持久的存储服务。Kafka 可以作为“可靠来源”,将数据分布在多个节点上,以实现单个数据中心内或多个可用区之间的高可用性部署。