【精】Kafka详解与梳理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fenglixiong123/article/details/86307650


1.kafka架构

broker服务:一般情况下一台主机就一个broker服务,但是也可以一台主机多个broker服务,只要端口不一样,存储路径不一样就可以了【不推荐】
zookeeper服务:管理broker集群、管理元数据
producer生产者:发布消息-主题
consumer消费者:消费消息
consumer group:消费组,在同一个消费组中的消费者,对同一条消息,只能消费一次
offset:某一个消费组,当前对于某一个主题下的某一个分区的消费偏移量

2.Topic主题

消息进入kafka集群时候,是以主题进行数据归纳(一条消息必须属于某一个主题)
在kafka集群中,可以有无数的主题
从生产者角度来说,他所操作的单元,一般情况下是以主题为单位
从消费者角度来说,他所操作的单元,一般情况下是以主题为单位
生产者消费者可以以主题更细操作——分区
从kafka的角度来说,没有限制生产者也没有限制消费者
生产者与消费者在处理数据的时候必须要知道操作的主题是哪一个

(1)创建Topic
nohup zookeeper-server-start.sh    /home/software/kafka_2.11-0.10.0.1/config/zookeeper.properties &
nohup kafka-server-start.sh    /home/software/kafka_2.11-0.10.0.1/config/server.properties &
kafka-topics.sh --create --zookeeper localhost:2181 --topic mytopic2 --partitions 3 --replication-factor 1
kafka-console-producer.sh --topic mytopic --broker-list localhost:9092
kafka-console-consumer.sh --topic mytopic --zookeeper localhost:2181
(2)删除Topic
kafka-topics.sh --delete --zookeeper localhost:2181 --topic mytopic
以上并没有真正删除知识标记删除需要重启才生效,目前还可以继续发送和消费消息
真正删除Topic
vi config/server.properties  
delete.topic.enable=true
(3)修改Topic
增加分区数
    kafka-topics.sh --alter--zookeeper localhost:2181 --topic mytopic3 --partitions 40
增加配置
    kafka-topics.sh --alter--zookeeper localhost:2181 --topic mytopic4 --config flush.messages=1
删除配置
    kafka-topics.sh --alter--zookeeper localhost:2181 --topic mytopic4 --delete-config flush.messages
(4)查看zk下面Topic
kafka-topics.sh --list --zookeeper localhost:2181
查看zk下面topic的详情
kafka-topics.sh --describe --zookeeper localhost:2181 (--topic mytopic3)

Topic:mytopic4    PartitionCount:3    ReplicationFactor:1    Configs:max.message.bytes=64000,flush.messages=1
    Topic: mytopic4    Partition: 0    Leader: 0    Replicas: 0    Isr: 0
    Topic: mytopic4    Partition: 1    Leader: 0    Replicas: 0    Isr: 0
    Topic: mytopic4    Partition: 2    Leader: 0    Replicas: 0    Isr: 0
Partitions:分区
Leader:表示作为读写的broker编号,server.properties中,broker.id=0 因为在kafka中如果存在多个副本因子的话,就会有leader和follower的关系,表示当前这个副本为leader所在的broker是哪一个
Replicas:所有的副本列表 0,1,2,表示该topic的每个分区在哪些broker中保存
Isr:可用列表 0,2,当前有效的broker

设置配置项
kafka-topics.sh --create --zookeeper localhost:2181 --topic mytopic4 --partitions 3 --replication-factor 1 --config max.message.bytes=64000 --config flush.messages=1
消息最大为64000b,每超过一个消息刷新

注意:
(1)一个broker服务下,可以创建多个分区
(2)创建主题时,副本个数应该小于可用broker数

jps会显示jvm进程
pid name
删除进程
kill -9 pid

3.Partitions分区

针对某一个主题下的数据的拆分,让消费者在拿数据的时候速度会更快
某一个分区中的数据是有序的切不可修改,不同分区数据是无序的
新进来的消息会追加到某一个分区的尾部

消费组:由一个或者多个消费组组成,同一个组中的消费者对于同一条消息消费一次
某一个主题下的分区数,对于消费者组来说,应该小于等于该主题下的分区数
如:某一个主题有4个分区,那么消费组中的消费者应该小于4,而且最好与分区数成整倍 1  2  4
分区中的数据都有相应的编号--offset--偏移量:记录当前有多少记录数,而且让消费者知道自己消费到什么地方,可以让
消费者自定义选择消费某一条消息(对于同一条消息,消费者可以消费多次)

确定一条唯一数据:主题+分区+偏移量

4.副本因子

副本以分区为单位,每个分区都有各自的主副本和从副本,主副本叫做leader从副本叫做follower,
处于同步状态的副本叫做in-sync replicas(ISR),follower通过拉的方式从leader同步数据,
消费者和生产者都是从leader写入和读取数据,不与follower交互

(1)创建副本因子时候,副本因子数量应该小于等于可用的broker数量

(2)副本因子操作的单位是分区为单位

(3)当有多个副本数时,kafka并不是将多个副本同时对外提供读取和写入

(4)作用是让kafka读取和写入数据高可用

(5)副本因子是包含本身的,同一个副本因子不能放在同一个broker里面

(6)再有多个副本的情况下,kafka会为同一个分区下的分区,设定角色关系leader,follower

(7)leader负责与外面的角色(生产者消费者)进行读写处理

(8)如果某一个分区有三个副本因子就算其中一个挂掉,那么只会在剩下两个钟选择一个leader
但不会在其他的broker钟另起一个副本(因为在另一台启动的话存在数据传递,就会长时间占用网络资源,
但是kafka是一个高吞吐量的消息系统,所以不会允许发生)

(9)ack机制:等所有副本确认、只需要leader确认、部分确认

5.Consumer消费者

Consumer连接指定的TopicPartition所在的leader,采用pull的方式从kafka logs中获取消息

在用户拿取数据时候可以采用kafka的两种api,高级和低级Api

高级APi:
    让用户使用时候方便,大部分的操作都是已经封装好的,比如当前消费到哪个位置,但是不够灵活

低级Api:
    没有进行包装,所有操作由用户决定,如自己得保存某一个分区消费的位置,但是操作复杂

6.Zk存储结构

猜你喜欢

转载自blog.csdn.net/fenglixiong123/article/details/86307650
今日推荐