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

  

posted @ 2018-12-27 20:04  叮叮007  阅读(721)  评论(0编辑  收藏  举报