1. 写在最前面
了解任何中间件的最好途径就是去应用他,但是很多代码初学者没办法搭建合适的环境去进行使用对应的中间件.这是困扰各个初学者的问题一之一.
尝试搭建消息中间件的应用是一个非常需要资源和耐心的做法,但是初学者往往没办法拥有大量资源和时间.这样从文档角度去了解一个消息中间件往往就是我的最佳选择.
对于中间件,最佳的了解手段就是去访问他的官方主页:kafka.apache.org/intro 这篇文章也就是通过官方主页,给部分没有原生阅读英文能力的同学提供帮助,并且加上作者自身的理解.
2.什么是kafka
kafka的设计初衷:帮助大公司解决处理实时消息.
让我们来看介绍kafka的一个图片
图中粉色的模块就是kafka.
kafka是一个message的消息中间件工具,他就像一个数据通道在每个应用之间链接成了一条条实时数据管道,来保证数据实时的流动,他的主要功能是
- 把数据裁剪成事件流(event streaming)对这个事件的流消息进行实时传输.
- 对于流数据,可以对你的流数据进行处理,例如对数据进行过滤,统计,处理.
- 对这个消息进行持久性存储,还能对消息进行实时性的获取与流式处理.
3.kafka的优缺点
那么kafka具有什么优点呢:
- 解耦:Kafka具备消息系统的优点,只要生产者和消费者数据两端遵循接口约束,就可以自行扩展或修改数据处理的业务过程.
- 削峰:如果使用MQ,某一时间段高峰期每秒5k个请求写入MQ,而A系统每秒钟最多处理2k个请求,A系统从MQ中慢慢拉取请求,每秒钟就拉取2k个请求,不要超过自己每秒能处理的最大请求数量就ok,这样下来,哪怕是高峰期的时候,A系统也绝对不会挂掉。等高峰期过去后,每秒写入MQ的请求大幅下降,此时就可以慢慢的把MQ中堆积的请求拉取消费.
- 持久性:Kafka可以将消息直接持久化在普通磁盘上,且磁盘读写性能优异.
- 扩展性:Kafka集群支持热扩展,Kafka集群启动运行后,可以直接向集群添加节点.
- 容错性:Kafka会将数据备份到多台服务器节点中,即使Kafka集群中的某一台Kafka服务节点宕机,也不会影响整个系统的功能.
- 时效性: ms级,并且支持海量存储的并发,不会增加延时.
- 消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次.(需要用户自己设计)
- 有优秀的第三方Kafka Web管理界面Kafka-Manager.
- Kafka支持Java、.NET、PHP、Python等多种语言
- 在日志领域比较成熟,被多家公司和多个开源项目使用.国内已知包括,美团,饿了么,阿里,字节
- 功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用.(通常和flinksql一起配合使用)
那么同样的,kafka具有什么缺点呢:
- Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长
- 使用短轮询方式,实时性取决于轮询间隔时间;
- 消费失败不支持重试;(这里需要用户手动进行代码策略)
- 支持消息顺序,但是一台代理宕机后,就会产生消息乱序;
- 社区更新较慢;
对于kafka来说他拥有分布式中间件的优秀特性.高可用性,高容灾性,以及高拓展性.是海量分布是存储的不二人选.
最后贴一张和各个中间件对比图
kafka的应用场景
那么kafka可以应用在什么场景中呢
-
解耦合
-
异步处理 例如电商平台,秒杀活动。一般流程会分为:1:
风险控制、2:库存锁定、3:生成订单、4:短信通知、5:更新数据 -
通过消息系统将秒杀活动业务拆分开,将不急需处理的业务放在后面慢慢处理;流程改为:1:
风险控制、2:库存锁定、3:消息系统、4:生成订单、5:短信通知、6:更新数据 -
流量的控制 :1. 网关在接受到请求后,就把请求放入到消息队列里面 2.后端的服务从消息队列里面获取到请求,完成后续的秒杀处理流程。然后再给用户返回结果。优点:控制了流量 缺点:会让流程变慢
在分布式系统中,kafka通常用作非实时消息的传输途径.