Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据以及物联网设备的采样信息。——百度百科
Apache Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布的消息队列,一般用于系统间解耦
、异步通信
、削峰填谷
等作用。同时kafka又提供了kafka streaming插件包实现了实时在线流处理。相比较一些专业的流处理框架不同,kafka streaming计算是运行在应用端,具有简单、入门要求低、部署方便等特点。
Kafka的两个特性
在我们传统的系统设计中,模块间调用大多采用同步方案,比如用户注册过程需要注册模块和短信模块协同完成,则总耗时60ms。
这种方案有几个特点:
-
同步交互
调用过程简单,请求响应模式。 -
资源浪费,并发不高
在响应之前,应用资源一直处于被占用的状态,比如CPU、内存、网络端口等。 -
系统耦合度高
模块与模块之间强耦合的情况下,假设由于某种原因其中一个业务不可用则导致整个业务不可用。
为解决上面的问题,我们引入Kafka来解决问题。
消息队列Message Queue
-
异步交互
把比较耗时的操作转成异步,提升并发能力,减少资源占用时间。 -
系统间解耦
业务模块的异常不会影响到其他主业务模块。 -
业务事件驱动
业务通过事件驱动方式来达到最终一致状态。
kafka Streaming 流处理
我们需要对数据现场的数据进行计算,现场数据的产生往往是在某个时刻爆发。引入消息队列后:
削峰填谷
消息队列主要就是缓冲的作用
,再通过消息队列缓慢的输送到传统数据库。
消息队列的消费方式
-
至多一次
:消息生产者将数据写入消息系统,然后由消费者负责去拉取消息服务器中的消息,一旦消息被确认消费之后,由消息服务器主动删除队列中的数据,这种消费方式一般只允许被一个消费者消费,并且消息队列中的数据不允许被重复消费。
-
没有限制
:同上述消费形式不同,生产者发布完整数据以后,该消息可以被多个消费者同时消费,并且同一个消费者可以多次消费消息服务器中的同一条记录,主要是因为消息服务器一般可以长时间存储海量消息。这种方式更像是广播订阅
。所有的消费者只需要知道上一次的消息位置即可。