有关 Azure HDInsight 中的 Apache Kafka 的常见问题解答

本文解答使用 Azure HDInsight 上的 Apache Kafka 时出现的一些常见问题。

HDInsight 支持哪些 Kafka 版本?

请在在 HDInsight 中可以使用哪些 Apache Hadoop 组件和版本?中查找有关 HDInsight 正式支持的组件版本的详细信息。 建议始终使用最新版本,以确保获得最佳性能和用户体验。

HDInsight Kafka 群集中提供哪些资源,我需要为哪些资源付费?

HDInsight Kafka 群集包含以下资源:

  • 头节点
  • Zookeeper 节点
  • 代理(工作器)节点
  • 附加到代理节点的 Azure 托管磁盘
  • 网关节点

所有这些资源根据 HDInsight 定价模型收费(网关节点除外)。 无需为网关节点付费。

有关各种节点类型的更详细说明,请参阅 Azure HDInsight 虚拟网络体系结构。 定价基于每分钟节点使用量。 价格因节点大小、节点数、所用托管磁盘类型和区域而异。

Apache Kafka API 是否适用于 HDInsight?

是,HDInsight 使用本机 Kafka API。 无需更改客户端应用程序代码。 请参阅教程:使用 Apache Kafka 生成者和使用者 API 来了解如何对群集使用基于 Java 的生成者/使用者 API。

是否可以更改群集配置?

是的,可通过 Ambari 门户更改。 门户中的每个组件都附带一个“配置”部分,可在该部分更改组件配置。 某些更改可能需要重启代理。

对于 Apache Kafka,HDInsight 支持哪种类型的身份验证?

使用企业安全性套餐 (ESP),可以获得 Kafka 群集的主题级别安全性。 有关详细信息,请参阅教程:在带有企业安全性套餐(预览)的 HDInsight 中配置 Apache Kafka 策略

我的数据是否已加密? 是否可以使用我自己的密钥?

托管磁盘上的所有 Kafka 消息都已通过 Azure 存储服务加密 (SSE) 进行加密。 传输中的数据(例如,在客户端与代理之间来回传输的数据)默认不会加密。 可以通过自行设置 TLS 来加密此类流量。 此外,HDInsight 允许管理其自身的密钥来加密静态数据。 有关详细信息,请参阅客户管理的密钥磁盘加密

如何将客户端连接到群集?

要使 Kafka 客户端可与 Kafka 代理通信,这些客户端必须能够通过网络访问代理。 对于 HDInsight 群集而言,虚拟网络 (VNet) 是安全边界。 因此,将客户端连接到 HDInsight 群集的最简单方法是在群集所在的同一 VNet 中创建客户端。 这些方案包括:

  • 要连接其他 Azure VNet 中的客户端 – 将群集 VNet 对等互连到客户端 VNet,并在群集中配置 IP 播发。 使用 IP 播发时,Kafka 客户端必须使用代理 IP 地址而不是完全限定的域名 (FQDN) 来连接代理。

  • 连接本地客户端 – 根据规划 Azure HDInsight 的虚拟网络中所述,使用 VPN 网络并设置自定义 DNS 服务器。

  • 为 Kafka 服务创建公共终结点 – 如果你的企业安全要求允许这样做,可为 Kafka 代理部署一个公共终结点,或者结合公共终结点部署一个自我管理的开源 REST 终结点。

是否可在现有群集中添加更多的磁盘空间?

若要增加 Kafka 消息可用的空间量,可以增大节点数目。 目前不支持将更多磁盘添加到现有群集。

Kafka 群集是否可与 Databricks 配合使用?

是的,Kafka 群集可以与 Databricks 配合使用,但前提是它们位于同一 VNet 中。 若要将 Kafka 群集与 Databricks 配合使用,请创建一个包含 HDInsight Kafka 群集的 VNet,然后在创建 Databricks 工作区并使用 VNet 注入时指定该 VNet。 有关详细信息,请参阅在 Azure 虚拟网络(VNet 注入)中部署 Azure Databricks。 创建 Databricks 工作区时,需要提供 Kafka 群集的启动代理名称。 若要了解如何检索 Kafka 代理名称,请参阅获取 Apache Zookeeper 主机和代理主机信息

如何获得最大的数据持久性?

数据持久性可以最大程度地降低消息丢失的风险。 若要实现最大数据持久性,我们建议采用以下设置:

  • 在大部分区域中使用最小复制系数 3
  • 在仅包含两个容错域的区域中使用最小复制系数 4
  • 禁用不纯粹的群首选举
  • min.insync.replicas 设置为 2 或更大 - 这会更改在继续写入之前必须与群首完全同步的副本数
  • ack 属性设置为 all - 此属性要求所有副本确认所有消息

配置 Kafka 以提高数据一致性的操作会影响生成请求的代理的可用性。

是否可将数据复制到多个群集?

是,可以使用 Kafka MirrorMaker 将数据复制到多个群集。 有关设置 MirrorMaker 的详细信息,请参阅镜像 Apache Kafka 主题。 此外,还有其他自我管理的开源技术(例如 Brooklin)和供应商能够帮助你复制到多个群集。

是否可以升级群集? 如何升级群集?

目前不支持就地升级群集版本。 若要将群集更新到更高的 Kafka 版本,请使用所需的版本创建新群集,然后迁移 Kafka 客户端以使用新群集。

如何监视 Kafka 群集?

使用 Azure monitor 分析 Kafka 日志