kafka的架构分析
整体架构组件
broker
kafka集群中每个节点都会运行一个kafka进程,这个进程被称为kafka的broker
broker是会参与leader分区的选举的程序
每个broker一定是某个分区的leader同时还会充当另外一个分区的follower
分区
每一个分区都有自己的副本
每个分区和分区的副本一定不会同时分配到同一台主机上
kafka会把一个Topic下的数据分散的存储在多个独立的分区文件中
副本因子
指定一个分区文件在kafka集群中有多少个备份副本数量
Topic
在kafka中是以Topic的形式来管理kafka中的消息数据
Topic是一个逻辑队列,不是一个物理存在的物体,它是由多个物理的分区队列组合而成
消息
一则消息是由key,value,时间三部分组成
消息存储
生产者发送消息的时候指定的是Topic,但是消息具体需要存储在Topic下的哪个分区
kafka的默认分发策略是由hash(key)%分区数的值 来决定的
1.可以使相同key的消息可以存储在同一个分区中
2.可以使消息均匀的分散在各个分区当中
分区恢复
当主分区节点宕机的时候,此分区便不能再正常写入消息.kafka会在其它副本分区所在的broker进行重新选举,给宕机的分区重新选举一个新的leader.这样该分区便可以重新读写消息
数据生产
1.每个Topic下包含一组分区数据
2.每个分区下的数据是有序而且不可变的队列存储模式
3.每个分区下的数据会在磁盘上保存一段时间再自动删除,不管数据有没有被消费到.消息数据具有持久性
数据消费
同一个消费组内的消费者只能均分同一topic下的分区
一个分区分配给了一个消费组内的某个消费者,这个分区就一定不会再对应这个组内的其它消费者。除非这个消费者发生了宕机,这个时候kafka会对这个消费组中的消费者和分区重新进行一次均分
Topic运维管理
创建topic ./kafka-topics.sh --bootstrap-server 192.168.227.152:9092 --create --topic topic01 --partitions 3 --replication-factor 1 --replication-factor 副本因子的参数值不能够超过broker的数量 每个broker占用一个kafka实例节点 表示每个分区数据存储的副本数 查看topic ./kafka-topics.sh --bootstrap-server 192.168.227.152:9092 --list ./kafka-topics.sh --bootstrap-server 192.168.227.152:9092 --describe --topic topic01 修改topic ./kafka-topics.sh --bootstrap-server 192.168.227.152:9092 --alter --topic topic01 --partitions 4 删除topic ./kafka-topics.sh --bootstrap-server 192.168.227.152:9092 --delete --topic topic01 创建生产者 ./kafka-console-producer.sh --broker-list 192.168.227.152:9092 --topic topic01 创建消费者 ./kafka-console-consumer.sh --broker-list 192.168.227.152:9092 --topic topic01topic管理