卡夫卡容量规划

时间:2018-03-19 16:13:53

标签: apache-kafka capacity-planning

我的雇主有一个Kafka集群处理有价值的数据。有什么办法可以让我们了解集群运行的容量百分比是多少?我们的集群可以处理更大量的流量吗?如果单个节点出现故障,我们可以存活一小时或一天吗?

1 个答案:

答案 0 :(得分:13)

我不确定完全你的意思,所以我会采取广泛的方法。

按容量表示,"我的Kafka群集会保存所有日志吗?"。这是以下功能:

如果您有2周的保留期,没有日志压缩(当消息消失时它已消失),没有日志压缩,并且在这两周内您希望推送10,000条消息(在这两周内) )1k大,复制3次...你最好有30,000k的存储空间,或30MB。

就进一步的计算而言,在您遇到问题,磁盘空间,IO之前,您的群集大小以及可以关闭的机器数量是多少 - 这样的操作问题,这里有关于该主题的一些非常棒的链接:

如果你的容量是,那么"我的Kafka群集可以有多少Kafka流量,也就是"物理"我的Kafka集群处理中的方框?":即Kafka在您的盒子上存储数据的速度有多快,那就是另一个问题。如果您想知道(例如)哪种AWS实例类型最快处理Kafka数据,或者为JVM提供了多少内存/您可以在该代理上运行哪些内容,那么这是一件好事。

值得注意的是,从Unix的角度来看,more the Unix kernel can use for a file cache盒子上的可用内存越多(所以不要天真地将它全部交给JVM;)) 。而且网卡的类型/容量也非常重要。

这里有几个有趣的事情要读:

考虑到理论上的最大值("比你需要的更多"), 可能值得测试你的个人经纪人/安装。要么使用Ranger,一个类似的工具,要么只是大量的实际数据(可能会测试你的数据管道,同时转换到我的下一个点...)

如果按容量表示,"消息通过我的数据管道需要多长时间,平均值或中位数,生成Kafka,由微服务消耗,转换,生成一个新主题,再次消耗......并最终落在微服务集群/数据管道的末端?"

这是一个功能:

  • 你有多少can partition the data
  • 如果您的客户群中有足够的消费者来处理所有分区
  • 每个微服务需要多长时间才能处理

假设你有一个关于分区级并发的好策略,我会在每条消息中添加跟踪信息。如果你想保持简单,愚蠢,可能会添加"初始摄取的时间"字段到您的消息。对于更复杂的跟踪,您可以为每条消息传递跟踪ID(初始生产者创建此消息,所有其他消费者只是将其传递,或者如果将消息拆分为比特等,则将其用于父母)。如果您有初始摄取时间,那么您的上一个微服务可以检查当前时间并计算您的计算长度指标。

不同的微服务将花费不同的时间来处理他们的消息。如果你有一个跟踪ID,你可以做一些有趣的事情,比如让每个微服务写一个Kafka主题,告诉他当前服务处理当前消息需要多长时间。 (将更多Kafka应用于您的Kafka问题!)。或者让每个主题都写入搜索数据存储,并在数据上使用小TTL:例如,使用Elasticsearch查询最近的Kafka数据,以便您可以跨主题获取搜索结果,这是我已经看过的一个巧妙的技巧。然后你可以看到微服务5很慢,你需要花一些时间来调整它。

编辑:您也可以通过LinkedIn's Burrow tool for Kafka监控您的生产渠道(看起来它仍然在2017年积极地获得爱情),将监控以确定您的消费者和其他东西一样落后。

我希望这会有所帮助。这是一个不幸的更广泛的问题,它表面上看来。最终它是%磁盘空间,%CPU和%的功能,你的SLA围绕数据管道...这有时归结为独特的因素,如你的消息大小,你是什么类型或想要的机器运行,你的微服务有多快。 Kafka技术可以处理大量的流量:LinkedIn不是一个小网站,而且Kafka被互联网上一些流量最大的网站使用。理论上,一个构造良好的代理群集应该能够处理你抛出的任何东西。实际部分归结为您的工作流程,您的需求,您实际使用它等等。