在互联网中,我们常常讲究着唯快不破,相信不少人都有这样的经历,明明一个非常简单的需求,但却要修改非常多的系统,导致开发效率低下,从而不停的加班。一个好的程序员,一定要学会设计出好的架构,写出优雅的代码,而好的架构,往往是各个系统低耦合的,消息队列,正是解耦的一个神器。
消息队列背景
我们举一个简单的例子,在我们的系统设计之初,所有的系统都是非常的简单,我们以电商系统为例,一开始我们可能只需要非常简单的一个web页面,然后调用成单系统,紧接着扣减库存,最后存到db即可。
到后面,随着业务的发展,系统变得越来复杂,可能我们每次交易,还要通知搜索系统,推荐系统,广告结算系统,商家后台等等等,我们的系统就会变得非常复杂。
本来一次非常交易操作,我们却要通知非常多个调用方,一旦任何一方调用失败,我们是否需要去重试?同时,有些操作非常的重,需要消耗大量的时间,本来用户都要下单给钱了,因为调用多个系统导致耗时过长用户下单失败,就非常容易造成客户的流失。
为了解决这个问题,我们引入了消息队列,让消息队列去通知其他系统,而下单仍然是下单操作。
交易系统只要在原来的基础上,把对应的信息写到消息队列里面,再有消息队列去干剩下的事情。这样,我们就能保持原有的交易流程上的简洁。而我们今天的主角Kafka正是常用的消息队列!
Kafka的作用
- Kafka最被大家熟知的运用场景,便是消息队列,也称消息中间件,消息中间件的主要优点有解耦、削峰、异步扩展性等等,并且Kafka还能保证消息是顺序消费。
- 存储系统,因为Kafka会将数据写到磁盘,所以不用担心数据断电丢失,有时候,我们也将Kafka作为存储系统来使用。同时,Kafka天生的持久化与多机副本机制,让数据存储更加可靠与可用。
- 流式处理平台,Kafka提供非常多的api,并且式非常可靠的数据来源,可以结合spark等开源框架进行流式计算。
Kafka的体系架构
Kafka的体系架构也比较简单,一个典型的卡夫卡体系包括若干消息的生产者,若干消息的消费者,若干个Broker以及一个Zookeeper集群,如下图所示,其中,zk集群主要用来进行集群元数据的管理以及控制器的选举等操作。
总结
今天我们对Kafka的初识就到这里,作为一个最流行的消息队列框架之一,Kafka有非常多值得学习的架构知识,欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)