kafka笔记

发布于 2023-07-11  35 次阅读


资料来源

https://zhuanlan.zhihu.com/p/163836793

消息系统

kafka是一种消息系统

我们知道常见的消息系统有Kafka、RabbitMQ、ActiveMQ等等,但是这些消息系统中所使用的消息模式如下两种:

PTP(peer to peer)队列模式:

  1. 消息生产者Producer1生产消息到Queue,然后Consumer1从Queue中取出并且消费消息。
  2. 消息被消费后,Queue将不再存储消息,其它所有Consumer不可能消费到已经被其它Consumer消费过的消息。
  3. Queue支持存在多个Producer,但是对一条消息而言,只会有一个Consumer可以消费,其它Consumer则不能再次消费。
  4. Consumer不存在时,消息则由Queue一直保存,直到有Consumer把它消费。

Publish/Subscribe(Topic)发布/订阅模式:

  1. 消息发布者Publisher将消息发布到主题Topic中,同时有多个消息消费者 Subscriber消费该消息。
  2. 和PTP方式不同,发布到Topic的消息会被所有订阅者消费。
  3. 当发布者发布消息,不管是否有订阅者,都不会报错信息。
  4. 一定要先有消息发布者,后有消息订阅者。

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集群状态。负载均衡、容灾、热备份等


间桐桜のお菓子屋さん