用 Apache Kafka 流式处理数据

已完成

Apache Kafka 是 LinkedIn 在 2010 年创建的,其目标是在延迟极低、容错级别很高的情况下以非常大的规模移动数据。 LinkedIn 随后于 2012 年将该项目捐赠给 Apache 基金会,但 LinkedIn 仍然在其整个生态系统中使用 Kafka 跟踪用户活动、交换消息和收集指标。

Kafka 是一种分布式流式处理平台,它的设计用途是:

  • 简化数据管道
  • 在流式处理模式中处理大量数据
  • 支持实时和批量系统
  • 大规模横向扩展

首先,让我们了解纯 Apache Kafka,然后再了解 Azure HDInsight 上的 Kafka。

Kafka 组件

在了解 Kafka 的工作原理之前,让我们来看看 Kafka 的一些关键组件的角色,以及它们如何共同提供一个可缩放性高和容错能力强的消息传送系统。

代理

Kafka 是一项群集服务,Kafka 群集也称为中转站。 中转站收到来自制作者的消息,并将这些消息存储到磁盘上。 中转站还对提取使用者的请求做出响应。 在中转站群集中,一个中转站充当控制器,负责管理操作并向中转站分配分区。

消息

Kafka 群集中的数据单位。 大多数实例中的消息都是键值对。

主题和分区

主题和分区是 Kafka 中的消息类别。 为了提高吞吐量,主题通常分为多个分区,建议至少分为三个分区。 消息以仅追加方式写入主题分区。 在多个中转站中对分区进一步复制,这是为了提高冗余,以防中转站故障。 通过分区能并行读取主题,因为它们使数据分布在多个中转站中。 有一个领导者副本用于处理所有读写请求,从领导者中复制了追随者。 如果领导者失败,某一个副本将成为领导者。

制作者和使用者

制作者和使用者是生成和使用 Kafka 系统中的消息的客户端。 制作者发布新消息,并将这些消息定向到特定主题。 使用者也可设计为写入特定主题分区。 使用者继而订阅一个或多个主题,并从这些主题读取消息。

使用者组

一个或多个使用者可以作为一组协作,也可以作为一组使用消息。 如果使用者的数量等于主题分区的数量,则每个使用者使用一个主题分区,从而产生并行性。

保留

在预定义的时间段内,Kafka 中的消息可持久保留在 Kafka 群集中。 达到保留限制后,Kafka 使这些消息过期并删除它们。

Offset

偏移量只是消息在分区中的位置。 在处理消息时更新分区中的当前位置,这被称为提交。 处理消息后,Kafka 将消息的偏移量提交到特定的内部 Kafka 主题。 当制作者将消息发布到分区时,消息会被转发到领导者。 领导者将消息添加到提交日志中,并增加消息偏移量。 在主题中标识消息的方式就是使用消息偏移量。 仅在消息被提交到群集后,才将其提供给使用者。

Zookeeper

Zookeeper 是一个协调服务,它在 Kafka 群集中提供群集状态的同步视图。 Kafka 使用 Zookeeper 在中转站和主题分区中选择领导者。 还使用 Zookeeper 管理构成群集的 Kafka 中转站的服务发现。 Zookeeper 将拓扑更改发送给 Kafka,这样群集中的每个节点都知道何时加入了新中转站、停止了中转站、删除了主题或添加了主题。

它们是如何结合起来的呢?

应用程序(也称为制作者)向 Kafka 中转站发送消息,这些消息由一个或多个使用者处理。 群集中的消息按主题分类。 例如,客户可以创建一个“销售”主题,以发送与销售相关的所有消息等。 当主题随着消息的增加而扩大时,它们被拆分成分区,这些分区在 Kafka 中转站中进一步复制,产生冗余。 分区分为领导者和追随者两类。 写入和读取都在领导者分区中进行,而追随者分区只是副本,与领导者分区的状态保持同步。 若要确定要写入和读取哪个分区,制作者和使用者需要知道哪些分区被设计为领导者。 Zookeeper 节点管理 Kafka 群集的状态,此外,选择分区作为领导者,并向制作者和使用者提供此信息。
Kafka 保证一个分区中的消息按传入时的序列排序。 可通过特定消息的偏移量(分区内消息所在的位置)对其进行明确地标识。 使用者从分区读取消息,处理后提交指示已成功处理消息的偏移量。 Kafka 将所有记录存储在磁盘上并保持消息持久性。 如果使用者因某种原因而中断并且处理停止,Kafka 会将这些消息保留在预先确定的保留期内,重新联机后,使用者可以从在中断前所在的已提交偏移量处重新开始处理。

How Apache Kafka works

Kafka 主题

Kafka 主题是一种在其中存储和发布消息的源或队列。 制作者将消息推送到主题,使用者从主题读取消息。 Kafka 中转站中的每个节点都包含多个主题。

Azure HDInsight 上的 Kafka 的优势是什么?

Kafka 的开源版本提供了许多功能,但它的设置非常繁杂。 Azure HDInsight 将最好的开源分析框架带到 Azure,使客户可以在几分钟内轻松设置开源群集(而不是花费数周或数月时间来设置),并且你可以立即使用它们。 HDInsight 的以下优势使其也可供企业立即使用:

  • 它是一种托管服务,可提供简化的配置过程。 其结果是经 Microsoft 测试并支持的配置。
  • Microsoft 在 Spark 和 Kafka 运行时间方面提供 99.9% 的服务级别协议 (SLA)。
  • 它使用 Azure 托管磁盘作为 Kafka 的后备存储。 如果有多个 Kafka 中转站,托管磁盘可为每个 Kafka 中转站提供多达 16 TB 的存储空间。
  • HDInsight 通过 VNet 提供最佳的企业级安全性,通过 Apache Ranger 通过细粒度安全性,并提供用于静态数据的创建自己的密钥 (BYOK) 加密
  • 符合 HIPAA、SOC 和 PCI 要求
  • 能够通过同一个 VNet 中的自动 Azure 资源管理器 (ARM) 模板部署具有 Spark 和存储的端到端流管道。
  • 可通过 Kafka MirrorMaker 实现高可用性,该工具可以使用主群集上的主题中的记录,然后在辅助群集上创建本地副本。
  • 创建群集后,HDInsight 允许更改辅助角色节点(托管 Kafka 代理)的数目。 可以通过 Azure 门户、Azure PowerShell 和其他 Azure 管理界面执行缩放。 对于 Kafka,在执行缩放操作后,应重新均衡分区副本。 重新均衡分区可让 Kafka 利用新的工作节点数。
  • Azure Monitor 日志可用于监视 Kafka on HDInsight。 Azure Monitor 日志显示虚拟机级别信息,如磁盘和 NIC 指标,以及 Kafka 的 JMX 指标。