Kafka本身的架构

115 阅读2分钟

在这里插入图片描述

Producer(生产者)生产消息以Topic(主题)为单位进行存储.消费者组订阅主题消费内容.

Producer生产者写数据可能写到TopicA-Partition0 分区 ,也可能写到 TopicA-Partition1分区, 也可以指定只写到哪个分区也是可以的.如果你不指定写哪个分区,你只是指定写到TopicA主题,那么就会采取轮询的策略,把数据轮流放到TopicA主题下的所有分区里面.

为了方便我的消费,以及提高消费的速度,我们是有消费者组的概念,一个组可以有多个消费者线程,一个Group组可以同时订阅多个Topic主题,多个Group也可以同时订阅多个主题.

每个Group里面各有三个Consumer消费者,TopicA下的所有分区的数据都会分配到多个消费者线程上面. 同时是互斥的同一时刻一个主题只能由一个Group内的一个Consumer来消费 ,

同时一个Consumer可以同时消费多个主题的,就是我既可以拿TopicA-Partition0的数据,也可以拿TopicA-Partition1的数据.

整理了一份Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。基本上涵盖了Java架构所有的技术知识点的资料,还覆盖了大厂面试题,同时也有一些springboot等项目源码分享给大家

由于资料图片太多就不一一的展示出来了 需要的话扫一扫 获取

不能一个Group里面的两个Consumer同时拿TopicA-Partition0里面的数据.这是不能允许的.

分区可以分散到多个Broker中的

多个Broker可以组成一个集群.

为了提高可用性,可以为分区增加副本,比如说TopicA-Partition0存到了Broker0和Broker2上.这样保证数据的可用性和安全性.

有了副本概念,客户端只能向Leader发送请求,比如说读取TopicA-Partition0的数据,就得看谁是Leader了, 假如说broker0是Leader,那么不管是Producer还是Consumer只能请求Leader角色的broker0机器, 然后broker2就是follower机器,它会发送fetch请求从leader角色的broker0机器上同步TopicA-Partition0数据.

另外Kafka集群需要借助Zookeeper的 ,你Broker运行期间需要给数据存到Zookeeper上的.比如说Topic叫什么名字,有多少分区等等,这些元数据都需要存到Zookeeper里面.