美图欣赏:
一.Kafka是什么
在流式计算中,Kafka一般用来缓存数据,spark通过消费Kafka的数据进行计算。
1)Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
2)Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
3)Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,一台kafka服务器就是一个broker。每个实例(server)成为broker。
4)无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性
二.Kafka消息队列内部实现原理
(1)点对点模式(类似接受文件,一对一,消费者主动拉取数据,消息收到后消息清除)
点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。
(2)发布/订阅模式(类似公众号,一对多,数据生产后,推送给所有订阅者)
注意:kafka里面的数据可以保留一段时间(配置文件可以设置),供别的消费者消费。kafka不会像hdfs一样,会永久存储数据
缺陷:
1.通常情况下,producer(生产者)消费队列是全部推送的。如果说,你不想要的话,还是统一推送给你。除非你不订阅他了,就不在推送了。
2.生产速度是生产者决定的,
推送的速率是由消息队列当前决定的
如果说消息队列推送的速率是100M/S,
那么consumerA的处理速率可能是50M/S, 那就崩了
consumerB的接收速率可能是200M/S,那就造成资源浪费
(3)发布/订阅模式(一对多,订阅者 拉取数据模式)
优点:就是订阅者可以根据自己的消费速率,去进行消费
缺点:订阅者要去拉取时数据,都得询问。有可能去询问时,没有消息,轮询就会可能产生资源浪费
————保持饥饿,保持学习
Jackson_MVP