2020 年精选:Kafka 优化:四个最佳实践

2020 年不会成为十年来最好的年份之一,但我们可以肯定地说,至少有一件好事发生了:Kafka 优化的四个最佳实践的总结。这篇博文最初发表于 5 月,并迅速成为我们读者的最爱。鉴于最佳实践至今仍然有效,我们想再次强调它们,以圆满结束这一年。阅读并享受它。

阿帕奇卡夫卡很棒。它允许创建易于扩展的实时、高吞吐量、低延迟数据流。优化的 Kafka 性能还带来其他好处,例如抵抗集群内发生的机器/节点故障以及集群上数据和消息的持久化。 Kafka 框架的性能优化应该是重中之重。

但优化是一项复杂的工作。优化您的 Apache Kafka 部署可能是一个挑战,因为分布式架构有很多层,并且可以在这些层内调整参数。

例如: 通常,具有自动数据冗余的高吞吐量发布-订阅 (pub/sub) 模式是一件好事。但是,当您的消费者努力跟上您的数据流,或者如果他们无法阅读消息,因为这些消息在消费者到达它们之前就消失了,那么就需要做一些工作来支持消费应用程序的性能需求。

Kafka 优化是一个广泛的主题,可以非常深入和精细,但这里有一些关键的最佳实践可以帮助您入门:

这听起来可能非常明显,但您会惊讶于有多少人使用旧版本的 Kafka。一个非常简单的 Kafka 优化举措是升级并使用最新版本的平台。您必须确定您的客户是否使用旧版本的 Kafka(0.10 或更早版本)。如果是,他们应该立即升级。

最新版本的 Kafka(版本 0.8x)附带 Apache ZooKeeper,主要用于协调消费者群体。使用过时版本的 Kafka 会导致重新平衡运行时间过长以及重新平衡算法失败。

优化 Apache Kafka 部署是优化平台堆栈层的练习。分区是吞吐量性能所基于的存储层。每个分区的数据速率是消息的平均大小乘以每秒消息数。简而言之,它是数据通过分区的速率。所需的吞吐率决定了分区的目标架构。

解决方案架构师希望每个分区都支持相似的数据量和吞吐率。实际上,数据速率会随着时间的推移而变化,生产者和消费者的原始数量也会随之变化。

可变性带来的性能挑战是消费者滞后的可能性,也就是消费者读取率落后于生产者写入率。随着 Kafka 环境的扩展,随机分区是一种有效的方法,可确保您不会在不必要地尝试将静态定义应用于移动性能目标时引入人为瓶颈。

分区领导通常是通过由 Zookeeper 维护的元数据进行简单选举的产物。然而,领导选举并没有考虑到各个分区的性能。根据您的 Kafka 发行版,可以利用专有的平衡器,但由于缺乏此类工具,随机分区提供了最不干涉的路径来平衡性能。

外卖?在写入主题时坚持随机分区,除非体系结构要求另有要求。

在较旧的 Kafka 版本中,参数 receive.buffer.bytes 默认设置为 64kB。在较新的 Kafka 版本中,参数为 socket.receive.buffer.bytes,默认为 100kB。

这对 Kafka 优化意味着什么?对于高吞吐量环境,这些默认值太小,因此不够用。当代理和消费者之间的网络带宽延迟乘积大于 LAN(局域网)时,情况就很明显了。

如果您的网络以 10 Gbps 或更高的速度运行并且延迟为 1 毫秒或更长,建议您将套接字缓冲区调整为 8 或 16 MB。如果内存有问题,请考虑 1 MB。

优化 Apache Kafka 部署是一项持续的工作,但这五个最佳实践应该是一个坚实的开始。上面提到的性能优化技巧只是用户可以实施以提高 Kafka 性能的一些优化方法。 Kafka 越来越受到应用程序开发人员、IT 专业人员和数据管理人员的欢迎。并且有充分的理由。查看我们的其他资源,其中详细讨论了 Kafka 应用于应用程序开发和数据管理的特定领域时的最佳实践。

已经在使用 Kafka 了吗?使用 Pepperdata Streaming Spotlight 监控和改进其性能。

回顾一下,我们建议您升级到最新版本的 Kafka。这是一件小事,但可以发挥重要作用。接下来,是确保您了解数据吞吐率。除非架构需求另有要求,否则我们建议您在写入主题时选择随机分区。如果你想实现高速摄取,调整消费者套接字缓冲区。我们希望您喜欢这篇 2020 年最佳博文,其中重点介绍了我们为 Kafka 优化推荐的最佳实践。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627