什么是消息队列?
存储数据的队列,借助消息队列可以做到异步、解耦、削峰。
kafka是消息队列模型是怎么样的?
Producer(生产者) : 产生消息的一方。 Consumer(消费者) : 消费消息的一方。 Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。 同时,你一定也注意到每个 Broker 中又包含了 Topic 以及 Partion 这两个重要的概念: Topic(主题) : Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息。 Partion(分区) : Partion 属于 Topic 的一部分。一个 Topic 可以有多个 Partion ,并且同一 Topic 下的 Partion 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker 。
同时需要注意的点:
上图中如果消费者组中的某个消费者挂了,那么其中一个消费者可能就要消费两个partition了 如果只有三个partition,而消费者组有4个消费者,那么一个消费者会空闲 如果多加入一个消费者组,无论是新增的消费者组还是原本的消费者组,都能消费topic的全部数据。(消费者组之间从逻辑上它们是独立的)
消息队列中有内部的topic,存储各个消费者的消费进度
image.png
Kafka 中发送 1 条消息的时候,可以指定topic, partition, key,data(数据) 4 个参数。如果你发送消息的时候指定了 partion 的话,所有消息都会被发送到指定的 partion。并且,同一个 key 的消息可以保证只发送到同一个 partition,这个我们可以采用表/对象的 id 来作为 key 。
怎么保证消息的有序?
1.1 个 Topic 只对应一个 Partion 2.(推荐)发送消息的时候指定 key/partion。