发布-订阅模型:kafka消息模型
发布-订阅模型主要是为了解决队列模型存在的问题。
发布订阅模型(Pub-sub)使用主题(topic)作为消息通信载体,类似于广播模式;发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的。
在发布-订阅模型中,如果一个订阅者,那它和队列模型就基本是一样的。所以说,发布-订阅模型在功能层面上是可以兼容队列模型的。
Kafka将生产者发布的消息发送到Topic(主题)中,需要这些消息的消费者可以订阅Topic(主题)
1.Producer(生产者):产生消息的一方。
2.Consumer(消费者):消费消息的一方。
3.Broker(代理):可以看作是一个独立的Kafka实例。多个Kafka Broker组成一个Kafka cluster。
Broker又包含了Topic和Partition这两个重要概念。
Topic(主题):Producer将消息发送到特定的主题,Consumer通过订阅特定的Topic(主题)来消费消息。
Partition(分区):Partition属于Topic的一部分。一个Topic可以有多个Partition,并且通一个Topic下的Partition可以分布在不同的Broker上,这也就表明一个Topic可以横跨多个Broker。
Kafka为分区(Partition)引入了多副本(Replica)机制。分区(Partition)中的多个副本之间会有一个叫做leader的家伙,其他副本称为follower。我们发送消息会被发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步。
生产者和消费者只和leader副本交互,可以将其他副本理解为leader副本的拷贝,它们的存在只是为了保证消息存储的安全性。当leader副本发送故障时会从follower中选举一个leader,但是follower中如果有和leader同步程序达不到要求的参加不了leader的竞选。
Kafka的多分区(Partition)以及多副本(Replica)机制有什么好处呢?
1.Kafka通过给特定Topic指定多个Partition,而各个Partition可以分布在不同的Broker上,这样便能提供比较好的并发能力(负载均衡)。
2.Partition可以指定对应的Replica数,这也极大提高了消息存储的安全性,提高了容灾能力,不过也相应的增加了所需要的存储空间。