资料来源
https://zhuanlan.zhihu.com/p/163836793
消息系统
kafka是一种消息系统
我们知道常见的消息系统有Kafka、RabbitMQ、ActiveMQ等等,但是这些消息系统中所使用的消息模式如下两种:
PTP(peer to peer)队列模式:
- 消息生产者
Producer1
生产消息到Queue
,然后Consumer1
从Queue中取出并且消费消息。 - 消息被消费后,
Queue
将不再存储消息,其它所有Consumer
不可能消费到已经被其它Consumer消费过的消息。 -
Queue
支持存在多个Producer
,但是对一条消息而言,只会有一个Consumer
可以消费,其它Consumer则不能再次消费。 - 但
Consumer
不存在时,消息则由Queue
一直保存,直到有Consumer
把它消费。
Publish/Subscribe(Topic)发布/订阅模式:
- 消息发布者
Publisher
将消息发布到主题Topic
中,同时有多个消息消费者Subscriber
消费该消息。 - 和PTP方式不同,发布到
Topic
的消息会被所有订阅者消费。 - 当发布者发布消息,不管是否有订阅者,都不会报错信息。
- 一定要先有消息发布者,后有消息订阅者。
kafka采用P/S模式
kafka
Kafka作为一个集群运行在一个或多个服务器上,这些服务器可以跨多个机房,所以说kafka是分布式的发布订阅消息队列系统。
kafka有四个api。消息会被存放在Topic中,按照kv + 时间戳的形式
Producer API:生产者API允许应用程序将一组记录发布到一个或多个Kafka Topic中
Consumer API:消费者API允许应用程序订阅一个或多个Topic,并处理向他们传输的记录流。
Streams API:流API允许应用程序充当**流处理器。**Topic作为输入输出
Connector API:连接器API允许构建和运行可重用的生产者或消费者。
kafka中有多种角色:
producer负责将消息push到broker的topic中。
之前已经提到,消息会存放在topic中,而topic的上层是broker。
broker就是kafka节点。broker负责创建topic,将消息保存,处理,持久化到磁盘。
topic可以通过replication-factor进行副本创建,一般情况下,num(broker)=num(replication-factor)。
topic中分为partition分区(磁盘分盘类似)。数据在逻辑上计存储在topic的partition中。partition中是一个有序的、不可变的记录序列。每个记录都会有一个ID号。
zookeeper是维护kafka集群状态。负载均衡、容灾、热备份等
Comments | NOTHING