一、什么是kafka?
Kafka最初由Linkedin 公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper 协调的分布式日志系统,也可以作为MQ消息系统。Linkedin 公司在2010 年贡献给了Apache基金会并成为了*开源项目。
简单一句话,是一款分布式消息发布和订阅系统,它的特点是高性能、高吞吐量。
二、Kafka名词解释
1、Broker
Kafka集群中包含的服务器,有一个或多个服务器,这种服务器被称为 Broker。
Broker 端不维护数据的消费状态,提升了性能。直接使用磁盘进行存储,线性读写,速度快。避免了在JVM 内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。
2、Producer
负责发布消息到Kafka Broker
3、Consumer
负责从Broker 拉取(pull)数据并进行处理。
4、Topic
每条发布到kafka集群的消息都有一个类别,这个类别被称为Topic。
物理上不同Topic的消息分开存储,逻辑上一个Topic 的消息虽然保存于一个或多个Broker上但是用户只需指定消费的Topic,即刻就可以生产或消费数据而不必关心数据存于何处。
5、Partition
Partition 是物理上的概念,每个Topic 包含一个或多个Partition。kafka分配的单位是Partition
6、Consumer Group
每个 Consumer 属于一个特定的 Consumer Group
可为每个 Consumer 指定Group name,若不指定 Group name 则属于默认的 Group
每条消息只可以被 Consumer Goup 组中的一个Consumer消费,但是可以指定多个 Consumer Group
所以一个消息在 Consumer Group 里面只可以被消费一次。已确定!
7、Topic & Partition
Topic 在逻辑上可以被认为是一个 queue,每发送一条消息必须指定它的Topic,可以简单理解为必须指明把这条消息放入到哪个queue里。
为了使得kafka 的吞吐率可以线性提高,物理上把Topic 分成一个或多个Partition,每个Partition 在物理上对应一个文件夹,该文件夹下存储这个Partition 的所有消息和索引文件。
若创建 Topic1 和Topic2 两个Topic,且分别有13个和19个分区,则整个集群上相应会生成共32个文件夹
三、kafka分布式消息原理
在Kafka中,Topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到 Kafka 集群的消息都有一个类别。物理上来锁,不同的topic的消息是分开存储的。
每个Topic 可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息。
每个Topic 又可以划分为多个分区(每个Topic至少有一个分区),同一topic 不同分区包含的消息是不同的。每个消息在被添加到分区时,都会被分配一个 offset (偏移量),它是消息在此分区中的唯一编号,kafka 通过offset 保证消息在分区内的顺序,offset 的顺序不跨分区,即kafka 只保证同一个分区内的消息是有序的。