自从Linkin开源Kafka之后,它似乎成了可以叫嚣所有传统消息中间件产品的行业新宠。事实上他也确实成为了大规模消息、微服务解耦以及可靠轻量流处理的业界标准解决方案。
我们知道在传统企业的数据汇聚层,往往会涉及到四到五种产品或者是开源的框架并且支持高可用和横向扩展。
![1](https://yqfile.alicdn.com/dd6c1a62c4b2f17f32f0db22e0732812017e1e18.jpeg)
上述架构首先会带来技术栈的多样化,包括有:
集成化平台(ETL/ESB)加上额外的“可选”组件;
消息系统(消息队列,点到点RPC调用);
内存缓存或数据网格;
数据库;
流数据引擎;
API网关
对于企业而言,技术的多样性从来不是好事,这意味着需要招募不同技术特长的人员,缺乏端到端的扩展性,要为每个场景设置中继(例如大型企业内部会有几百组MQ集群),每个组件需要分别维护和配置管理且版本依赖性强。
我们看到近些年很多中间件公司都出现了衰败的现象,像IBM,Oracle。主要是因为IT生态圈出现了重要转变,伴随着企业数字化转型的五大趋势,系统间事务处理进入了大规模、快速度和高效率的时代
在这样的大趋势下,传统的紧耦合、有限规模、组件复杂的传统技术栈开始出现严重的性能瓶颈。架构师们意识到需要转变交互思路,可能一个简单的、可扩展的、松耦合的基于事件的平台才能解决实时性大数据并发处理的难题。
广义上说事件可以是一期市场活动,一张发票,一笔交易或一次客户体验等等,基于事件的平台以事件为核心建立系统间的交互。在这个平台上,数据库和数据仓库的接口功能被弱化,甚至其本身不再是通过CRUD来编辑数据,而是作为事件的持久化存储(数据仓库)以及面向应用对事件进行优化展示(数据库)。
而流处理/实时处理平台是事件驱动交互的基石。它向企业提供了全局化的数据/事件链接(不同业务只需明确是数据生产者还是消费者即可)、即时数据访问、单一系统统管全域数据以及持续索引/查询能力。
Apache Kafka就是这样一个实时事件处理平台,可以将各类应用的事务流按照主题分类并分发给对应的订阅者/消费者。它的吞吐量也是受到广泛验证的,比如其创始公司领英的每日消息处理量超过4,500,000,000,000条,Netflix日均处理量在6PB以上。
而且,Kafka平台几乎不涉及其他技术栈,它的消息系统、持久化存储和缓存用的都是自身的内核,实时和批处理工作在客户端完成,数据集成靠自身的连接器,流处理有自身的流式引擎KSQL,请求/响应机制通过REST代理完成。
市场上的同类产品早先有ActiveMQ和RabbitMQ,在领英将Kafka开源后,市场几乎被垄断。直到阿里基于Kafka研制出了新的Apache顶级项目RocketMQ,并且经过双十一的高压打磨后,Kafka才真正有了市场竞争对手,