我只想在几个月内使用它后分享我对Kafka的想法,始终从实际的角度来看。我对Kafka Internals的基础知识不了解。我知道日志处理的原则等,但从来没有让我的手脏了。所以这只是新人的意见,而不是专家。
一切都开始,因为我们开始看到活动收集用例:一个网站,具有相当大的流量,想要收集活动,以实时测量发生的事情。像Google Analytics的定制版本,但没有采样。我们在过去几个月里工作了与Kafka一体化,以涵盖这些用例。
我必须承认我偏向了Kafka,我认为这是一个大型,复杂的技术,只添加了额外的复杂性。
我仍然认为是一样的,它很复杂,将Kafka添加到您的堆栈将添加一堆服务和一些额外的决策,以便进行配置等。在大多数情况下,将数据发送到文件的单个进程应用程序和服务器的小型HTTP服务器,在更少的停机时间内将执行更好。如果您比较了解,设置,配置和开始使用的负担,例如Redis,这是一个大量的工作。
当然,当事情变得困难时,当Kafka闪耀以及所有复杂性的时候,这些复杂性使您可以灵活地解决大量负载和复杂的生产者,消费者,处理器用例。但即使在这种情况下,你也需要不仅仅是Kafka 101。
为了诚实,这是真的,无论你使用什么技术,一个简单的负载平衡器都可以成为在某些情况下保持的噩梦。高负荷软件项目总是以某种方式变得复杂,与F1汽车需要高度复杂的系统,一堆工程师和力学,并持续维护快速,软件项目也是如此。
这里的关键是你多久达到复杂程度;理想情况下,工具应在您的项目中变得复杂。
无论如何,关于Kafka最有趣的事情是它使得它可以在规模上实现一些非常有用的东西:一个明确的方式来协调和测量和缩放数据消耗。我想知道为什么HTTP负载平衡器没有得到Kafka的消费者方法。和同样的指标。和一个非HTTP协议和协调工作人员的方式:)
坐标:Kafka不仅依靠服务器做事,客户知道“我应该消耗的分区是什么分区”。或者在经纪之间的负载平衡。
缩放:当您通过查看未处理的消息的数量时,您可以清楚地耗尽更多的计算能力。这听起来很明显,但这并不是,至少对我来说。这是一个非常古老的排队问题,可以理解和衡量(从电信系统的早期征收有很多关于排队的理论),但通常隐藏在大多数软件中。
Kafka不是唯一做这些事情的工具,我猜所有留言经纪人都这样做,但我从未使用过他们。
无论如何,我不知道的一些实用信息,但希望我知道:
您需要了解更多的事情,而不是预期的能够使用它:分区,消息,分配,经纪人,消费者,不同类型的超时......那就是表面。
自行建立群集是屁股的痛苦。使用汇合云是昂贵的,但它只是有效,这就是人们使用它的原因。
即使对于本地安装,Kafka也是一个皮塔饼。我建议使用RedPanda,一个命令,你有一个兼容Kafka兼容API和运行。没有动物园,没有docker-compose,没有kubernetes。
Kafka没有一个很好的HTTP界面(有充分的原因)。 HTTP代理是默认选择,但云云不提供(RedPanda Do)。我认为使用自定义协议是正确的选择,但是在基于HTTP的系统和Kafka之间存在阻抗不匹配(虽然不在所有情况下)。
管理消费者的错误很难。好的部分是数据在kafka中,所以你可以重播它,但是如果问题是你处于更大的麻烦的逻辑问题(不是颞小故障)。本文解释说很好。
所以,如果你问我,你需要知道在将Kafka添加到堆栈之前要做什么,但它确实会在您的平台使用开始增长时带来非常好的架构模式。
我们现在幸福地摄取了数百万的每分钟活动,几个月,没有任何重大问题。实际上,Kafka从一些复杂的情况下救了我们。可能是一个快速的HTTP服务器写入文件的批处理也将有效,但我认为当你想在没有太多痛苦的情况下缩放罢工时,Kafka是一个很好的解决方案。