一、什么是kafka?
是分布式(项目部署于多个服务器)的基于发布/订阅模式的消息队列,主要用于处理活跃的数据,如:登录、浏览、点击、分享等用户行为产生的数据,说白了就是一个消息系统(消息队列)。
进一步理解:
1.消息队列
消息(Message):网络中的两台计算机或者两个通讯设备之间传递的数据,如:文本、音频等。
队列(Queue):直接把它想象成羽毛球筒,羽毛球先进先出,是一种特殊的线性表,特殊之处在于,只能在头部删除元素,在尾部添加元素。
消息队列(MQ):保存消息的队列,相当于消息传输过程中的一个容器,主要有两个作用,一个是给外部提供存入消息的接口,另一个是提供取出消息的接口。
保存消息的队列,是消息在传输过程中的容器。主要提供生产和消费接口供外部调用,进行数据的存储和获取。
二、MQ的分类
1.主要有两大类:点对点(Peer-to-Peer)、发布/订阅(Publish/Subsribe)。
2.共同点:生产消息发送到队列中,消费者从队列中读取并消费消息。
3.不同点:
(1)点对点
组成:消息队列、发送者(Sender)、接受者(Receiver)。
注:一个生产者生产的消息只能有一个消费者消费,一旦被消费了,消息就不会存在于消息队列中。
(2)发布/订阅
组成:消息队列、发布者(Publisher)、订阅者(Subscriber)、主题(Topic)
注:每个消息可以有多个消费者,彼此互不影响,如:我在微信公共号发了一篇文章,关注我的人都能看到,即消息被多个人接受到(订阅者)。
三、常见的消息系统
ActiveMQ:实现了JMS(Java Message Service)规范,支持性较好,性能相对不高。
RabbitMQ:可靠性高、安全。
Kafka:分布式、高性能、跨语言。
RockeMQ:阿里开源的消息中间件,纯Java实现。
四、kafka特性
1.高吞吐量、低延迟:每秒可以处理几十万条消息,其延迟只有几毫秒,每个主题可以分多个分区,消费组对其分区进行消费。
2.可扩展:集群支持热扩展。
3.持久性、可靠性:可以持久化到本地磁盘,支持数据备份防止数据丢失。
4.容错性:允许节点中节点失败。
5.高并发:支持数千个客户端同时读写。
五、kafka的组成
1.Broder:kafka集群中包含多个kafka服务节点,每个kafka服务节点就是一个broker。
2.Topic:主题(相当于消息的类型),用来存储不同类别的消息(kafka消息数据村存放于硬盘)。
3.Partition:分区,每个Topic可以包含一个或多个分区,分区的数据量是在创建主题时决定的,
目的在于进行分布式存储。
4.Replication:副本,每个分区可以有多个副本,分布在不同的Broker上,会选出一个副本呢作为Leader,所有请求都会通过Lea