kafka与zookeeper实战笔记
kafka命令
1.先启动zookeeper zkServer.cmd/zkServer.sh
2.启动kafka[需要指定server.properties文件] kafka-server-start.bat .\..\..\config\server.properties
3.创建主题 需要指定zk管理地址、副本因子、分区、主题名称
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic secure
4.生产者连接指定broker的topic进行生产
kafka-console-producer.bat --broker-list localhost:9092 --topic secure
5.消费者进行连接,消费指定的topic
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic secure 【--from-beginning 会消费所有包括历史信息】
本地集群搭建(3节点)
1.复制2个server.properties -> 修改文件的broker.id 打开[#listeners=PLAINTEXT://localhost:9093]
2.根据配置文件启动
kafka-server-start.bat .\..\..\config\server-1.properties kafka-server-start.bat .\..\..\config\server-2.properties
3.集群环境创建主题
kafka-topics.bat --zookeeper localhost:2181 --create --replication-factor 3 --partitions 1 --topic secure2
【遇到超时异常,需要重新启动zookeeper环境】
================================================
查看启动后的环境信息
>\kafka\kafka_2.11-2.1.0\bin\windows>kafka-topics.bat --describe --zookeeper localhost:2181 --topic secure2 Topic:secure2 PartitionCount:1 ReplicationFactor:3 Configs: Topic: secure2 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
4.关闭kafka中的一个节点,查看leader切换
>\kafka\kafka_2.11-2.1.0\bin\windows>wmic wmic:root\cli>process where "caption = 'java.exe' and commandline like '%server-1.properties%'" get processid ProcessId
12168
>taskkill /pid /f /12168
查看关闭后的leader结果
>\kafka\kafka_2.11-2.1.0\bin\windows>kafka-topics.bat --describe --zookeeper localhost:2181 --topic secure2 Topic:secure2 PartitionCount:1 ReplicationFactor:3 Configs: Topic: secure2 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,2
kafka中生产者和消费者配置信息
Producer API的主要配置设置在下表中列出以便更好地理解 - client.id 确定生产者应用 producer.type 是同步还是异步? acks acks配置控制生产者请求下的标准被认为是完整的。 retries 如果生产者请求失败,则自动重试具有特定的值。 bootstrap.servers 引导经纪人(brokers)列表。 linger.ms 如果想减少请求的数量,可以将linger.ms设置为大于某个值的值。 key.serializer 序列化器接口的键。 value.serializer 序列化器接口的值。 batch.size 缓冲区大小。 buffer.memory 控制生产者可用于缓冲的总内存量。
Consumer客户端API主配置设置的配置设置 - bootstrap.servers 经纪人的引导列表。 group.id 将个人消费者分配给组。 enable.auto.commit 如果值为true,则为偏移启用自动提交,否则不提交。 auto.commit.interval.ms 返回更新的消耗偏移量被写入ZooKeeper的频率。 session.timeout.ms 指示在放弃并继续使用消息之前,Kafka将等待多少毫秒以等待ZooKeeper响应请求(读取或写入)。
=====================zookeeper==================================
zookeeper解决分布式中解决竞争条件和死锁问题使用故障安全同步方式处理;数据不一致采用原子性解决。
优点:1.简单 2.同步 3.有序 4.序列化 5.原子性
1.创建
#create [/flag] /path zookeeper系统结构由:client server cluster leader follower 分层命名空间:/ config 全局配置【其下存储有多个znode,大小可为1M】 workers 命名空间 创建一个永久的Znode create /FirstZnode "Myfirstzookeeper-app" 创建一个连续的Znode create -s /FirstZnode "second-data" 创建一个临时的Znode create -e /SecondZnode "Ephemeral-data"
2.查询
#get /path get /FirstZnode Myfirstzookeeper-app cZxid = 0x1f6 ctime = Thu Dec 27 19:29:18 CST 2018 mZxid = 0x1f6 mtime = Thu Dec 27 19:29:18 CST 2018 pZxid = 0x1f6 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 20 numChildren = 0
3.监视
显示通知当指定znode或znode的子数据变化。只能在 get 命令中设置监视。
get /path [watch] 1 get /FirstZnode 1
4.设置数据 设置指定znode的数据。
set /path data =================监视 修改 查询============================ [zk: localhost:2181(CONNECTED) 10] get /FirstZnode watch 1 监视 Myfirstzookeeper-app cZxid = 0x1f6 ctime = Thu Dec 27 19:29:18 CST 2018 mZxid = 0x1f6 mtime = Thu Dec 27 19:29:18 CST 2018 pZxid = 0x1f6 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 20 numChildren = 0 [zk: localhost:2181(CONNECTED) 11] set /FirstZnode 123 设置 WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/FirstZnode cZxid = 0x1f6 ctime = Thu Dec 27 19:29:18 CST 2018 mZxid = 0x1fb mtime = Thu Dec 27 19:40:05 CST 2018 pZxid = 0x1f6 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 [zk: localhost:2181(CONNECTED) 12] get /FirstZnode 查询 123 cZxid = 0x1f6 ctime = Thu Dec 27 19:29:18 CST 2018 mZxid = 0x1fb mtime = Thu Dec 27 19:40:05 CST 2018 pZxid = 0x1f6 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0
5.创建子znode 创建子znode类似于创建新的znodes。唯一的区别在于,子 znode 的路径将包含有父路径。
create /parent_path/subnode_path data ==============创建和获取============================= [zk: localhost:2181(CONNECTED) 13] create /FirstZnode/ChildZnode 123 Created /FirstZnode/ChildZnode [zk: localhost:2181(CONNECTED) 14] get /FirstZnode/ChildZnode 123 cZxid = 0x1fc ctime = Thu Dec 27 19:43:10 CST 2018 mZxid = 0x1fc mtime = Thu Dec 27 19:43:10 CST 2018 pZxid = 0x1fc cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 ===========================================
6.列出子znode
ls /path [zk: localhost:2181(CONNECTED) 15] ls /FirstZnode [ChildZnode] [zk: localhost:2181(CONNECTED) 16] ls /FirstZnode/ChildZnode []
7.检查状态 状态描述了指定znode的元数据。它包含详细信息,如时间戳,版本号,访问控制列表,数据长度和子znode数量。
stat /path [zk: localhost:2181(CONNECTED) 17] stat /FirstZnode cZxid = 0x1f6 ctime = Thu Dec 27 19:29:18 CST 2018 mZxid = 0x1fb mtime = Thu Dec 27 19:40:05 CST 2018 pZxid = 0x1fc cversion = 1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1
8.删除Znode 删除指定znode和递归删除所有的子znode。
rmr /path rmr /FirstrZnode