目录
5. 创建 zkdata文件夹(在zookeeper-3.4.6下创建)
zookeeper与kafka的关系
ZooKeeper(动物园管理员)和Kafka之间有一种密切的关系,它们通常一起使用以确保分布式系统的可靠性和一致性。以下是它们之间的主要关系:
-
协调服务: ZooKeeper 最初设计为分布式系统的协调服务,用于管理和维护配置信息、命名服务、分布式锁等。在Kafka中,ZooKeeper主要用于协调Broker之间的活动、存储Kafka的元数据以及处理领导者选举等任务。
-
元数据存储: Kafka使用ZooKeeper来存储关于Broker、Topic和Partition的元数据信息。这包括哪些Broker是活动的,哪些是备份的,以及每个Partition的领导者是谁等。
-
领导者选举: Kafka的每个Partition都有一个领导者(leader)负责处理读写请求。ZooKeeper帮助Kafka进行领导者选举,确保在Broker失败或新Broker加入时能够选择新的领导者。
-
分布式锁: 在一些情况下,Kafka可能需要执行一些操作,例如重新分配Partition的副本。这时,ZooKeeper提供了分布式锁的功能,确保在进行这些敏感操作时只有一个Broker能够执行。
总的来说,ZooKeeper为Kafka提供了一个稳定的分布式协作基础设施,帮助确保Kafka集群的高可用性和一致性。
一. zookeeper的安装与部署
1. 上传zookeeper
进入package查看
2. 解压到对应的包下
tar -zxvf zookeeper-3.4.6.tar.gz -C /opt/jy
3. 配置环境变量
vim /etc/profile
添加如下代码:
export ZOOKEEPER_HOME =/opt/jy/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
刷新环境变量
source /etc/profile
切换到zookeeper下的conf目录,将zoo-sample.cfg 重命名为zoo.cfg
mv zoo-sample.cfg zoo.cfg
4. 编辑 zoo.cfg文件
dataDir=/opt/jy/zookeeper-3.4.6/zkdata
server.1=Jdb01:2888:3888
server.2=Jdb02:2888:3888
server.3=Jdb03:2888:3888
5. 创建 zkdata文件夹(在zookeeper-3.4.6下创建)
6. 在zkdata下创建myid文件
vim myid
在文件中输入数字1
注意:
myid与配置文件中末尾增加部分相对应
配置文件zoo.cfg中的server.1=Jdb01:2888:3888,所以01中的myid为1
分发给另外两台并修改myid文件
7. 启动zookeeper
zKServer.sh start
8.群启动脚本
vim zk.sh
chmod 777 zk.sh
二. kafka的安装与配置
1.上传kafka
进入package查看
2. 解压到对应的包下
tar -zxvf kafka_2.11-2.4.1.tgz -C ../jz
3. 配置环境变量
vim /etc/profile
export KAFKA_HOME=/opt/jy/kafka
export PATH=$PATH:$KAFKA_HOME/bin
刷新环境变量
source /etc/profile
4. 编辑server.properties文件
broker.id=0
delete.topic.enable=true
log.dirs=/opt/jy/kafka/logs
zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181/kafka
注意:
broker.id 为节点id,不同的节点用不同的数字表示,此hadoop01为例,id为0
log.dirs 为kafka存储消息(log日志数据)的目录
zookeeper.connect 为zookeeper服务地址ip
5. 创建logs
mkdir logs
6. 启动kafka
启动kafka之前先启动zookeeper
./kafka-server-start.sh ../config/server.properties
7. 创建主题
./kafka-topics.sh --bootstrap-server hadoop01:9092 --create --topic topic-test1 --partitions 4 --replication-factor 2
./kafka-topics.sh --bootstrap-server hadoop01:9092 --list
--create
:指定创建主题的操作。--topic <topic-name>
:指定要创建的主题名称。--bootstrap-server <bootstrap-server>
:指定 Kafka 集群的引导服务器(即 broker)列表及其地址和端口号。例如hadoop01:9092
。--partitions <num-partitions>
:指定要为主题创建的分区数。--replication-factor <replication-factor>
:指定主题的副本因子,即每个分区的副本数
8. 压力测试
kafka-producer-perf-test.sh --topic topic-test --record-size 1024 --num-records 1000000 --throughput 10000 --producer-props bootstrap.servers=hadoop01:9092,hadoop02:9092,hadoop03:9092 batch.size=16384 linger.ms=0
-
--topic topic-test
: 指定要进行压力测试的主题名称为topic-test
。 -
--record-size 1024
: 指定每条消息的大小为 1024 字节。 -
--num-records 1000000
: 指定要发送的消息总数为 1000000 条。 -
--throughput 10000
: 指定发送消息的吞吐量为 10000 条/秒。这里表示希望以每秒 10000 条的速度发送消息。如果设置为 -1,则表示没有吞吐量限制。 -
--producer-props bootstrap.servers=hadoop01:9092,hadoop02:9092,hadoop03:9092 batch.size=16384 linger.ms=0
: 这部分指定了用于配置生产者的相关属性。bootstrap.servers=hadoop01:9092,hadoop02:9092,hadoop03:9092
:指定 Kafka 集群的 broker 服务器列表为hadoop01:9092,hadoop02:9092,hadoop03:9092
。batch.size=16384
: 指定生产者的批量大小为 16384 字节。这表示生产者将累积到一定大小的消息批量发送到 Kafka,以提高性能。linger.ms=0
: 指定消息在缓冲区中等待发送的时间为 0 毫秒。这表示生产者将立即发送消息而不进行等待。
*生产者压力测试
kafka-producer-perf-test.sh --topic <topic-name> --num-records <num-records> --record-size <record-size> --throughput <throughput> --producer-props bootstrap.servers=<bootstrap-servers>
例如:
kafka-producer-perf-test.sh --topic my-topic --num-records 100000 --record-size 100 --producer-props bootstrap.servers=hadoop01:9092
--topic <topic-name>
:指定要进行压力测试的主题名称。--num-records <num-records>
:指定要发送的消息总数。--record-size <record-size>
:指定每条消息的大小(字节)。--throughput <throughput>
:指定发送消息的吞吐量,即每秒发送的消息数量。可选参数,默认为 -1(无限制)。--producer-props bootstrap.servers=<bootstrap-servers>
:指定Kafka集群的引导服务器列表及其地址和端口号。
*消费者压力测试
kafka-consumer-perf-test.sh --broker-list <broker-list> --topic <topic-name> --messages <num-messages> --threads <num-threads>
例如:
kafka-consumer-perf-test.sh --broker-list hadoop01:9092 --topic my-topic --messages 100000 --threads 1
--broker-list <broker-list>
:指定Kafka集群的broker列表。--topic <topic-name>
:指定要进行压力测试的主题名称。--messages <num-messages>
:指定要消费的消息总数。--threads <num-threads>
:指定用于消费的线程数。