自从去年年末踏入流处理的世界,就无法停止对它的探索。阅读了所有能找到的相关书籍,并不断在网络上寻找有趣的内容,包括工程博客上的新颖方法和有趣的用例,现在甚至在梦中也在思考它。
“当格里高尔·萨姆沙一天早晨从不安的梦中醒来时,他发现自己在床上变成了一只巨大的害虫。” 弗朗茨·卡夫卡,《变形记》
好吧,并没有变成像卡夫卡笔下格里高尔那样的怪物,甚至相差甚远。但即使只是接触了几个月的Kafka(技术),它也在许多方面带来了转变。它影响了想要的工作方式,遇到的问题的解决方法,它打开了以前可能关闭的大门,如果没有像流处理这样的范式。
将新奇转化为热情
这种转变的第一部分是,在这个新的流处理世界中工作与以前习惯的工作方式有多么不同。正如在早期的一篇帖子中描述这种变化:
简而言之,自愿地把职业生涯中所做的一切都扔出窗外,转而使用一个完全不同的堆栈、编程范式、语言等。猜想这可能是可怕的,但所有事情中它是...令人兴奋的。
这是一个完全不同的解决问题的范式,它有自己独特的挑战和细微差别,这些是有趣的谜题。架构变化,处理复制,分区,弄清楚使用哪个JDK,流,表,以及无数其他已经忘记的问题,每周,如果不是每天,都在讨论。
起初,过渡是有趣的,将这归因于它的新奇。因为一切都是新的,它更像是从习惯的工作中的假期。当然,有挑战,误解,还有很多事情完全搞错了,但这是预期的。和同事们发现自己在乐观和几乎想要完全放弃实验之间摇摆,直到...它奏效了。
这是最基本的场景,只是简单的丰富,但它是令人震惊的。消息流入流中,从已知来源丰富,然后被发送到它们的最终目的地。这真的就像魔法一样,除了敢说即使是最好的魔术师也会为处理的吞吐量而挣扎。
被迷住了。
甚至在几个月内,就对它产生了职业上的迷恋。读了几本专门讨论这个话题的绝佳书籍,在网上寻找有趣的用途(向LinkedIn、Uber、Netflix以及其他所有利用它的透明技术巨头致敬),由于他们没有卖T恤,甚至去拿了一张纸:
(如果Confluent或其他任何有Kafka纪念品的人在读这篇文章,请告诉,还在寻找一两件T恤。)
将批次转换为流
想说Kafka的第一个显著之处在于,它提供了另一种解决问题的方法,具体来说,就是实时解决问题的能力。如果一直生活在批处理的世界中,这本身就是一个令人信服的故事。现在有能力在事件发生时采取行动或处理事件,而不是等到某个给定的时间间隔,甚至在意识到它们存在之前。
流并不解决所有问题,会让这个来自Bill Bejeck的引用帮助决定何时合适:
这里是要记住的关键点:如果需要在数据到达时立即报告或采取行动,流处理是一个很好的方法。如果需要进行深入分析,或者正在为以后分析而编译大量数据库,流处理方法可能不合适。 Bill Bejeck,《Kafka Streams in Action》
一直认为自己是一个实用主义者,坚信应该使用最适合这项工作的工具,但总是要意识到偏见。最舒适的锤子可能不会帮助拧紧松动的螺栓,如果它做到了,那么可能会造成一些不可挽回的损害。
Kafka很容易使用像Connect这样的工具进行集成,以实时同步Kafka中的数据到各种数据源(例如,几乎所有类型的关系和非关系数据库,Elasticsearch,Big Query等)。同样,数据也可以以相同的方式源入Kafka。
不必完全采用一种方法或另一种方法;Kafka可以补充现有的生态系统。如果有长期运行的数据分析要做,那么使用最适合该工作的工具。如果需要在Kafka中使用该数据进行丰富或做出决策,那么在有意义的时候将其同步到Kafka,并在那里立即使用它。
有选择,使用它们。
转变应用程序和业务
尽管学习曲线陡峭,但与随后的分析瘫痪相比,它相形见绌。尽管Bill之前引用了何时流是合适的,但人们很容易开始感受到实时处理的即时满足感,并被带走。
看到以前可能只在半夜运行一次的过程,现在看到处理在几秒钟内完成,这真是太棒了,尤其是对工程之外的人来说。这就是必须小心并抵制流化一切的冲动(当这样做没有意义时,要反击)。
鉴于今天数据量巨大。公司正在收集比以往更多的数据,并寻求利用所有这些信息做出几乎所有事情的决策。不言而喻,由于公司数据泛滥,它们正在不断地接收数据。
数据不断地流入系统,时间就是金钱。Kafka使这些系统能够立即做出决策,改变方向,采取行动,或者至少在有价值事情发生时立即得到通知,而不是等到报告慢慢进入他们的收件箱。