Topicctl-管理卡夫卡主题的更简单方式

2020-08-26 13:28:53

今天,我们重新发布Topicctl,这是一款轻松、声明性地管理卡夫卡主题的工具。这就是为什么。

Apache Kafka是Segment基础设施的核心组件。在我们的核心数据管道中进行处理时,每个命中Segment API的事件都会经历多个Kafka主题(有关更多技术细节,请参阅本文)。在高峰时段,我们最大的群集每秒处理300多万条消息。

虽然Kafka非常擅长高效地处理大量请求负载,但配置和管理集群可能会很繁琐。对于主题尤其如此,主题是用于对Kafka集群中的消息进行分组和排序的核心结构。

创建和更新主题的标准界面不是超级用户友好的,需要对卡夫卡的内部结构有透彻的了解。如果您不小心,很容易进行意外更改,从而降低性能,或者在最坏的情况下导致数据丢失。

对于卡夫卡专家来说,这些问题并不是问题,他们要处理的是少数相当静态的话题。然而,在Segment,我们的集群中有数百个主题,这些主题被数十个工程团队使用。此外,主题本身也是相当动态的。通常会添加新功能,并经常调整现有功能以处理负载更改、新产品功能或生产事件。

以前,这种复杂性大部分由我们的SRE团队处理。想要创建一个新主题或更新现有主题的工程师可以在Jira提交一张罚单。然后,SRE团队成员将阅读票证,手动查看实际群集状态,找出要运行以进行所需更改的命令集,然后在生产中运行这些命令。

从请求者的角度来看,该过程是一个黑匣子。如果以后出现任何问题,SRE团队将不得不再次参与调试问题并更新群集配置。这个系统很繁琐,但大体上是有效的。

但是,我们最近决定更改最大主题中的分区布局,以降低网络成本。除了通常的与主题相关的更改请求流(每个请求都必须手动处理)之外,还要处理这种推出,对于我们规模较小的SRE团队来说,处理起来太多了。

我们需要一种更好的方法,既能让我们自己应用更大的更改,同时又能让我们团队之外的其他人更容易管理他们的主题。

我们决定开发工具和相关的工作流,使主题管理变得更容易、更安全。我们所需的最终状态具有以下属性:

其中很多都是我们使用Terraform更改AWS和使用kubectl更改Kubernetes的经验所形成的。我们想要一个和卡夫卡一样的东西!

我们开发了一个工具topicctl,它可以满足上述对卡夫卡主题管理的需求。我们最近开源了topicctl,我们很高兴有其他人使用它,并与我们一起努力让它变得更好。

项目自述文件中有关于如何配置和运行该工具的详细信息,因此我们在此不再重复。然而,我们想要介绍一些亮点。

与kubectl一样,资源在YAML中配置,并通过应用进程进行更改。每次应用运行都会将集群中主题的状态与配置中的所需状态进行比较。如果两者相同,则不会发生任何情况。如果有任何不同之处,topicctl会将它们显示给用户进行审查,并获得批准,然后以适当的方式应用它们:

最后一个属性是最复杂的,也是该项目的主要动机。

该工具支持静态放置以及平衡引导机架和/或确保分区的所有副本位于同一机架中的策略。我们在Segment积极使用这些策略来提高性能和降低网络成本。

除了编排主题更改之外,topicctl还使得理解集群中的主题、代理、消费者组、消息和其他实体的当前状态变得更容易。根据用户反馈,在评估了现有Kafka工具中的差距之后,我们决定提供一个有用的接口。

我们使用c-bata/go-Prompt库和其他组件创建了一种简单、视觉上有吸引力的方式来探索Kafka群集:

除了repl之外,topicctl还公开了一个更传统的“get”界面,用于显示有关集群资源的信息,以及一个“ail”命令,该命令提供了一些基本的消息尾随功能。

Topicctl在纯围棋中实现。大多数与集群的交互都是通过ZooKeeper进行的,因为这通常是最简单的(有时也是唯一的)选择,并且与较旧的Kafka版本完全兼容。一些功能,如主题尾随和滞后评估,使用更高级别的代理API。

除了上面提到的Go-Prompt库之外,该工具还大量使用Samuel/Go-zooKeeper(用于与ZooKeeper交互)和Segment/Kafka-Go库(用于与代理交互)。

在Segment,我们已经将所有主题的topicctl配置放在单个git资源库中。当工程师要创建新主题或更新现有主题时,他们会在此repo中打开拉取请求,审批并合并更改,然后通过Docker在目标账户的堡垒主机上运行topicctl Apply。与旧方法不同的是,大多数更改都是自助式的,而且更难犯会导致生产事故的错误。

更大的变更仍然需要SRE团队的参与,但这不像以前那么频繁了。此外,团队可以将topicctl本身用于这些操作中的许多,这比旧工具更高效。

通过更好的工具和工作流程,我们能够减轻我们SRE团队的负担,并围绕Kafka主题的管理提供更好的用户体验。请随时查看topicctl,如果您有任何反馈,请让我们知道!

装满了市场趋势、分析和洞察力,这些都是我们从与数千名客户的交谈中总结出来的。