初试kafka后的一点感性的想法

偶然的机会吧,就接触到了Kafka,这看样子和我的“本业”是相冲突的。

  我并不擅长业务编程,对应用层的业务逻辑处理也是一直无感,也不曾想过在这一层的某某领域大有建树,在APP in anywhere的时代,看样子我是最坚定不移地永不进坑的人,我只想深挖计算机网络底层的技术细节,老实本分地做一个筑路工,把路修好了,管它上面跑的是奥迪还是奥拓,这些与我无关…

  阴错阳差的,我要做和kafka相关的事了,当我知道这件事的时候,其实在我内心里,我是拒绝的,然而我并没有拒绝,总之,从未经历过的东西先试试看咯,真搞不定,那也是没办法,至少去尝试了。嗯,我跟同事,朋友还有家人都是这么讲的,态度比过程重要,到时候没做成,至少我的态度是端正的,问题可以出在技术层面,自己也可以术业不精,但是态度必须端正,这是基本原则。


kafka是个什么玩意儿?明确的说,上周接到这个任务的时候,我整整讨厌它讨厌了一天,我几乎从不加班,但为了让自己彻底恶心一把(打架前先把自己弄疼弄流血,这样打起来比较狠…),竟然加班学习这玩意儿了…而且还在晚九点钟下班的路上寻思着用什么尖酸刻薄的语言发一篇朋友圈,以表达对kafka的愤恨!但是我没有,因为我仔细琢磨后发现kafka还是有点意思的。当初骂娘的时候,那是因为不懂,其实现在也不懂,只是稍微懂了一点。

  我就不扯kafka的概念了,我就说,理想中的模块间的交互是下面的样子:
这里写图片描述

但实际上,绝大多数的程序员会把系统搞成下面的样子:
这里写图片描述

别人不说,我自己就干过这样的事。当时我的产品甚至没有复杂的业务逻辑要处理,就是一个简单的加密机网络设备,我使用的技术也不外乎就Netfilter,Policy Routing等,在最后整理设计文档的时候,需要画模块图,我竟然无法做到不使用交叉线而把模块间关系理清

  kafka可以做到,它可以让你的系统成为下面的样子:
这里写图片描述

中间那颗红星就是kafka扮演的角色。我这么把kafka画成一颗红星似乎把它的重要性放大化了,想想也是,kafka无非也就是一个普通的开源组件,它的地位有这么重要吗?…kafka本身并不是很重要,这里重要的是kafka表达的思想。

  这让人想起广播式以太网到交换式以太网的进化,以太网交换机一出鞘似乎就把以太网从同轴电缆的冲突域里永久地拯救了出来,从此一路康庄大道,直到现在依然是气吞万里如虎。同样让人想起IP路由器的作用,可以将来自不同应用,经由不同链路的消息通过统一的IP数据报的方式逐跳递送到目的地。

  kafka采用了同样的思路。层次不同而已。这是kafka的本质,至少是我理解到的目前,觉得这就是它的本质。就像我十几年前刚开始琢磨路由器和交换机的时候,也是这么想的。如果这是对的,我应该过不了多久就能精通kafka了。

  考虑到应用层组件之间交互的复杂性,同时又要尽可能帮助组件之间解耦,kafka不假设自己和任何组件有亲密关系,即它的发布订阅模式对于每一个生产者和每一个消费者是一视同仁的,我认为这个设计理念及其好,它似乎可以推导出几个kafka最为关键的特性。为什么呢?

  如果一个消费者把消息取走了,另一个消费者又来取,怎么办?如果消息一旦取走就消失,那么kafka的broker和消费者之间就有了协议,协议的目的是为了商定交互的语义,有交互自然会产生效果,随着交互组件的增多,这种所谓的效果将会非常难以集中管理,这势必会对kafka造成巨大的压力,严重影响可扩展性。什么都不做是最好的选择。因此落地持久化策略存储显得好像就是一个必然的选择一样,东西就保存在那里,随便谁随便什么时候来拿都OK(当然,所谓的策略化落地指的就是这个消息能存多久,这个是由broker自己来控制的)。offset管理就成了设计中消费者消费消息的游标,这也是自然而然的,既然broker什么都不管了,那么显然需要消费者自己来管理咯。

  再说存储设计。既然都持久化落地存储了,增删改查的效率就是问题,虽然cache的思想能解决这个问题,但是考虑到cache严重依赖局部性原则,所以它只能解决带有局部性特征的交互扩展性问题,这就是交互行为有了要求。而正确的,一劳永逸的做法则是重新设计存储模型。自然而然的,主题分区,区内分段便被设计来解决扩展性问题,而稀疏索引则永驻内存,用来在工程上优化本来已经很优秀的算法。


由于我也是刚刚接触kafka这个玩意儿,觉得挺有意思就随便写了点。我这里再给出一个类比。

  也许你早就不使用中国邮政的服务了吧,现在都不写信了,而且快递东西都是走私营的快递公司,比如顺丰,圆通这类。其实,中国邮政的快递物流业务还是比较像kafka的,why?因为它不送货上门,并且长时间帮你保存东西,只要到时候取件时交保管费就行。


前面的牢骚和浅析应该可以证明kafka可能将会是我骂了之后会成为朋友的那种,这会儿也刚刚看完《Kafka权威指南》的前几章,家人也都睡了,就撩开半瓶真露随意写上几笔。

  在我毕业那年,向往华为的网络技术已有两年有余,然而华为根本不会接收大专生,而我只是一个写Java的,就准备放弃网络技术投身于应用开发,曾经追过一段Spring,EJB之类的,记得当时还是JDK 1.4…也是很怀念那段时光的,刚刚我老婆转给我一篇文章《嘿,破街》,这描绘了我学Java的那两年熟悉的街道…到了长春参加工作,我写了一年半的Java,有幸一位恩师让我懂了一点iptables,然后就发现原来在没有交换机路由器的情况下也能玩网路,Linux可以扮演任何角色…再后来就不那么向往华为了,不过一直还是想搞网络,也确实一直在搞网络相关的,直到一个月前…

  也不知道到底能不能玩转kafka,但我预感是可以的,这种事情以前经常发生,一开始是iptables,然后是Box 2D,再然后是OpenVPN,…现在是Kafka…
这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值