kafka的操作1(命令行方式)及操作2(kafka的工作流程写/读)

命令行方式

与主题有关的命令

  • 需要连接上zookeeper集群操作(主题的名字以及分区数据、副本数等属于元数据,元数据是在zookeeper中存储)
  • 查看kafka服务器中有哪些主题
    kafka-topics.sh --zookeeper node1:2181 --list
  • 创建一个主题
    kafka-topics.sh --zookeeper node1:2181 --create --partitions 分区数 --replication-factor 备份数 --topic 主题的名字
  • 查看某个主题的详情
    一个主题可以有多个分区,一个分区可以设置多个备份,如果分区有多个副本,那么消费者消费哪个副本?kafka中的主题的分区的多个副本有一个leader和follower区分 leader角色的分区副本会对外让消费者消费,让生产者去写数据,follower的分区副本相当于是一个热备
    kafka-topics.sh --zookeeper node1:2181 --describe --topic 主题的名字
  • 删除某个主题
    kafka-topics.sh --zookeeper node1:2181 --delete --topic 主题的名字

与生产者生产消息有关的命令

  • 生产者生产消息的命令
    kafka自带的一个简易的生产者,接受控制台的输入数据生产到对应的主题中
    kafka-console-producer.sh --broker-list node:9092,node:9092,node3:9092 --topic 主题的名字

与消费者消费消息有关的命令

  • 旧的消费者命令行代码
    需要连接zookeeper集群消费数据----分区无法指定
    kafka-console-consumer.sh --zookeeper node1:2181 --topic 主题名
  • 新的消费者命令行代码
    需要连接kafka集群消费数据---可以手动指定消费者消费主题的哪个分区
    kafka-console-consumer.sh --bootstrap-server node1:9092 --topic 主题名 --partition 分区
    kafka-console-consumer.sh --bootstrap-server node1:9092 --topic 主题名 --from-beginning

kafka的工作流程

生产者的写入数据的流程

  • 写流程
  1. 生产者先从zookeeper的"/brokers/.../state"节点找到partition的leader
[zk: localhost:2181(CONNECTED) 4] get /brokers/topics/bbb/partitions/0/state
{"controller_epoch":13,"leader":1,"version":1,"leader_epoch":0,"isr":[1,0]}
[zk: localhost:2181(CONNECTED) 5] get /brokers/topics/bbb/partitions/1/state
{"controller_epoch":13,"leader":2,"version":1,"leader_epoch":0,"isr":[2,1]}
[zk: localhost:2181(CONNECTED) 6] get /brokers/topics/bbb/partitions/2/state
{"controller_epoch":13,"leader":0,"version":1,"leader_epoch":0,"isr":[0,2]}
  1. producer将消息发送给该leader
  2. leader将消息写入本地log
  3. followers从leader拉取消息,写入本地log后向leader发送ACK
  4. leader收到所有ISR中的replication的ACK后,增加HW(high watermark,最后commit 的offset)并向producer发送ACK
  • 消费者消费数据的流程
  1. 消费者都是以消费者组的形式存在的,
  2. 消费者组可能只有一个消费者,也可以有多个消费者,
  3. 一个消费者组能消费一个Topic的数据,也能消费多个Topic的数据
  4. 一个topic中的一个分区数据在一个消费者组中只能被一个消费者消费,但是可以被多个消费者组消费
  5. 在一般情况下,定义消费者组的时候,消费者组当中的消费者个数要和topic的分区数量保持一致。
  6. 消费者数量可以小于分区数量,但是不建议大于分区数
  7. 当消费者数量大于分区数时,消费者剩余
# 修改consumer.properties中的group.id属性
[root@node2 config]# pwd
/opt/app/kafka-0.11.0.0/config
[root@node2 config]# vi consumer.properties
{
group.id=uek01
}

[root@node3 config]# pwd
/opt/app/kafka-0.11.0.0/config
[root@node3 config]# vi consumer.properties
{
group.id=uek01
}

[root@node1 ~]# kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic t1


[root@node2 ~]# kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --topic t1 -consumer.config /opt/app/kafka-0.11.0.0/config/consumer.properties


[root@node3 ~]# kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --topic t1 -consumer.config /opt/app/kafka-0.11.0.0/config/consumer.properties
输入:1 2 3 4 5 6 7 8
node2消费情况:2 4 6 8
node3消费情况:1 3 5 7 9
posted @ 2022-09-06 11:22  jsqup  阅读(107)  评论(0编辑  收藏  举报