在Java的学习路线中,消息队列是必不可少的一部分。我们从ssm或者springboot的架构的搭建,功能实现,产品完善,会经历技术基础,广度,产品需求等等的多重考验,如果“有幸”软件的使用人数不是很多,那么我们对技术的需求也许后面不会太高,只需要对产品精益求精即可(如果产品能应用成功,或者重构成功)。
但是如果产品有更高的需求,并发量增高,开始服务化,对高可用,高性能,可伸缩,可扩展等方面有了巨大的需求,那我们不仅要对框架技术,对公司内使用的整体技术架构,自动化开发测试架构都要进行调整,以适应较高的需求。比较经典的是互联网公司的产品,很多一部分都具备这个特点,互联网一句经典的话是:天下武功,唯“快”不破!充分看出对性能的注重。
并发量增大,最开始的需求可能就是读需求,为了适应,数据方面我们会经历双库读写分离,增加缓存等阶段,经过实践,缓存和读写分离等技术架构的确能有效的增加访问量,抵抗住压力,缓存技术不是本教程的重点,因此不会细讨论。
读压力后,可能下一个就是写压力,缓解写压力最经典的技术就是消息队列!在传统行业,相信大家多少都接触过JMS,作为J2EE规范的一部分,经典的容器中间件(Jboss,Webblogic等)都有JMS的实现(如果没用过可以简单学一下,作为Java原生的消息队列,学习成本还是比较低的),在JMS中,有Queue和Topic两种Subject,包含了Send/Receive和Publish/Subscribe两种收发模式,但是,在互联网公司,JMS的应用并不广泛,一方面是商业的AppServer都是收费的,而互联网产品大多是免费的,因此使用的产品也多是免费的,另一个原因是这些AppServer大多实现性能较差,例如有评测显示,ActiveMQ比JbossMQ速度要高十倍,某些场景下ZeroMQ的速度要高出一个数量级。
此外,一些开源的MQ的实现针对互联网行业,除了提供Queue和Topic的支持,还有partition,group,broker等更为复杂的消息模型(例如Kafka),Kafka的设计具有使用简单,功能丰富,高性能等优点,天生具有持久,分片,复制等功能,使用时对开发者和运维人员的体验都很好,是非常优秀的开源消息队列产品。
学习Kafka分为两种,一种是单纯结合框架学习安装和使用,比如学习安装(参见此处)成功后,结合springboot框架,学习如何整合kafka(参见此处),对于开发者来说,这样学习可以快速上手,后面遇到问题(如消息丢失,重复读取等)会查一查解决方案,其它一切问题都交给运维人员解决,这样学习可以做到知其然,但是不会知其所以然。
作为kafka的学习者和开发者,未来的架构师和技术专家,我们应该对了解kafka有更加深切的需求和欲望,精通kafka不仅会在运维和开发上得心应手,在面试的时候也能够加很大的分,相信各位面试经验丰富的都有深切的体会!
学习内容
第一部分,我们将学习Kafka各种概念的介绍;
第二部分,我们将学习kafka的安装,和配置的介绍;
第三部分,学习向kafka写入数据;
第四部分,学习从kafka中读取数据;
第五部分,深入kafka内部,学习成员关系,控制器,请求,存储等;
第六部分,学习数据传递的可靠性;
第七部分,学习构建数据管道;
第八部分,学习跨集群数据方案;
第九部分,学习kafka的管理;
第十部分,学习kafka的监控;
最后,学习流式处理。
以上内容根据各种教程,书籍进行总结整理,可以大概看到kafka的知识点,这也是我的习惯,对一门技术的所有知识点进行概览,可以减少学习的心理难度。
JMS作为Java基础,这里不会介绍,但强烈建议都学一学,这是入门消息队列技术的基础。