博客主页:JavaProfessional
一个专注于Java的博主,致力于使用通俗易懂的语句讲解内容,期待您的关注!
Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。
kafka非常快,并保证零停机和零数据丢失。

生产者发送消息到消息队列中,一个或多个消费者可以消耗同一个队列中的消息,但是某一条消息只能由一个消费者消费。
这也就意味着当一条消息被某个消费者消费过后,它将不再存在于消息队列中

生产者发送消息到消息队列中,消费者可以订阅一个或多个消息队列,某一消息也可以被多个消费者消费。
当某一条消息被某个消费者消费过后,这条消息不会被删除,因为也许还有其他消费者仍需消费。
整个kafka分布式集群被称为kafka cluster。
kafka是一个分布式系统,也就意味着kafka可以多台机器组成一个集群,集群中的每一台服务器是一个broker。broker是一个物理概念。
kafka作为一个消息队列系统,是可以创建多个消息队列的,每个消息队列就是一个topic。
kafka中Topic被分成多个partition分区。Topic是一个逻辑概念,Partition是最小的物理存储单元,存储着一个topic的部分数据。每个partition都是一个单独的log文件,每条记录都以追加的形式写入。


TopicA = PartitionA + PartitionB + PartitionC
kafka把topic的多个partition分布在多个broker中。这样做会有很多好处:
Kafka 为一个 Partition 生成多个副本,并且把它们分散在不同的 Broker。
如果一个 Broker 故障了,Consumer 可以在其他 Broker 上找到 Partition 的副本,继续获取消息。

如上图,无论哪个broker挂掉了,我们都还是能找到A+B+C
Partition 中的每条记录都会被分配一个唯一的序号,称为 Offset(偏移量)。
Offset 是一个递增的、不可变的数字,由 Kafka 自动维护。
当一条记录写入 Partition 的时候,它就被追加到 log 文件的末尾,并被分配一个序号,作为 Offset。

所以,一个 Partition 内部消息有序,一个 Topic 跨 Partition 是无序的。