Slack使用开源组件构建自动驱动Kafka集群


Slack工程师介绍了他们如何构建和操作 Kafka 集群以大规模运行。
Slack 将 Kafka 广泛用于他们的作业队列和移动关键任务数据(分析、日志记录、计费数据等)
这篇博文介绍了 Slack 如何(以及为什么)使用 Chef 和 Terraform 自动化管理 Kafka 集群的操作方面。
 
Kafka 在 Slack 中用作发布-订阅系统,在最重要的Job Queue中发挥着重要作用,这是我们的异步作业执行框架,几乎涉及用户在 Slack 上执行的每一个操作(例如展开通道中的链接、发送通知、通知机器人、更新搜索索引和运行安全检查)。此外,Kafka 充当神经系统,用于跨 Slack 移动关键任务数据,为我们的日志记录管道、跟踪数据、计费管道、企业分析和安全分析数据提供动力。

 
什么是自驱动 Kafka 集群?
Kafka 是一款出色的软件,可在 Slack 的数百个节点上运行。但是,如果您曾经尝试过部署或管理 Kafka,您就会知道这并非易事。我们经常因为缓慢的,有时是宕机的代理或容量管理问题而被寻呼。
自动化 Kafka 操作的目标是消除日常管理 Kafka 的操作开销。
为此,我们为 Kafka 集群确定了一些常见的操作任务,包括:

  • 例行的 Kafka 管理操作,例如创建主题、更改分区计数和将分区重新分配给代理
  • 容量规划操作,例如向集群添加/删除代理
  • 更换代理或部署新版本软件等运营问题
  • 诊断 Kafka 集群中问题的随叫随到的负担
  • 客户支持解释 Kafka 消费者是否跟上

因此,当我们迁移到新版本的 Kafka 集群时,我们决定将其操作方面自动化,或者使其成为自助服务。
 
我们的 Kafka 设置由以下组件组成:
构建、发布、配置和部署:Chef 和 Terraform
 

使用 Cruise Control、Kafka Manager、Chef 和 Terraform 等开源组件大规模运行自我修复的 Kafka 集群。此外,使用标准 SRE 原则和适当的工具(如 Kafka Manager 和 Kafka offset exporter),可以使 Kafka 变得可靠、自助服务和自动运作。
可以在此处找到我们的 Kafka 配置。
 
展望未来,Kafka 将在 Slack 中扮演更重要的角色,因为它是新的变更数据捕获 (CDC) 项目的一部分。新的 CDC 功能将支持 Slack 权限服务的缓存需求,该服务用于授权 Slack 中的操作,还将实现对我们的数据仓库的近实时更新。为此,我们在 Slack 组建了一个新的数据流团队来处理所有当前和未来的 Kafka 用例。新的数据流团队将维护和支持 Slack 的所有 Kafka 集群。该团队还将负责构建与 Kafka 相关的标准化库和工具,并将致力于进一步改进当前的 Kafka 操作和效率。

点击标题见原文