环境
- centos7
JDK安装
- JDK8
官网下载jdk8以上的版本, 官网地址cd /root tar zxf jdk-8u181-linux-x64.tar.gz mv jdk1.8.0_181 /usr/local/ echo 'export JAVA_HOME=/usr/local/jdk1.8.0_181' >> /etc/profile echo 'export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
keekeeper集群安装
keekeeper集群安装
- keekeeper-3.7.0
zk01 192.168.31.165
zk02 192.168.31.166
zk03 192.168.31.167
ZooKeeper主要有领导者(Leader)、跟随者(Follower)和观察者(Observer)三种角色。
ZooKeeper集群需要是>1的奇数节点。例如3、5、7等等。
注意:三台机只能挂一台,至少有两台才可以正常工作, - 安装包下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz - 创建ZooKeeper相关目录
- 创建应用目录
mkdir /usr/zookeeper -p - 创建数据目录
mkdir /data/zookeeper -p
mkdir /data/zookeeper/data -p
mkdir /data/zookeeper/logs -p - 解压到指定目录
tar -zvxf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/zookeeper - 配置环境变量
- 修改环境变量文件
cat >> /etc/profile <<EOF export ZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.0-bin export PATH=$ZOOKEEPER_HOME/bin:$PATH EOF
- 使环境变量生效
source /etc/profile
echo $ZOOKEEPER_HOME
配置ZooKeeper
- ZooKeeper基础配置
#进入ZooKeeper配置目录 cd $ZOOKEEPER_HOME/conf #新建配置文件 cat > zoo.cfg << EOF #zk之间心跳间隔2秒 tickTime=2000 #LF初始通信时限 initLimit=10 #LF同步通信时限 syncLimit=5 #Zookeeper保存数据的目录 dataDir=/data/zookeeper/data #Zookeeper保存日志文件的目录 dataLogDir=/data/zookeeper/logs #客户端连接 Zookeeper 服务器的端口 clientPort=2181 server.1=192.168.31.165:2888:3888 server.2=192.168.31.166:2888:3888 server.3=192.168.31.167:2888:3888 EOF
- 配置节点标识
zk01: echo "1" > /data/zookeeper/data/myid zk02: echo "2" > /data/zookeeper/data/myid zk03: echo "3" > /data/zookeeper/data/myid
- 防火墙开放
2181、2888、3888端口 - 启动ZooKeeper
sh $ZOOKEEPER_HOME/bin/zkServer.sh start
测试
- 查看节点状态
sh $ZOOKEEPER_HOME/bin/zkServer.sh status - 客户端连接测试
这里随机选其中一个节点作为客户端连接其他节点即可sh $ZOOKEEPER_HOME/bin/zkCli.sh -server 192.168.31.165:2181
Kafka安装部署
- Kafka介绍
Kafka是一个开源的分布式消息引擎/消息中间件
在Kafka集群(Cluster)中,一个Kafka节点就是一个Broker,消息由Topic来承载,
可以存储在1个或多个Partition中,Partition用于主题分片存储。
发布消息的应用为Producer、消费消息的应用为Consumer,多个Consumer可以促
成Consumer Group共同消费一个Topic中的消息。
kafka01 192.168.31.165
kafka02 192.168.31.166
kafka03 192.168.31.167 - 应用&数据目录
#创建应用目录 mkdir /usr/kafka #创建Kafka数据目录 mkdir /data/kafka -p mkdir /data/kafka/logs-p chmod 777 -R /data/kafka
- 下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.12-2.8.0.tgz
- 解压到应用目录
tar -zvxf kafka_2.12-2.8.0.tgz -C /usr/kafka
- Kafka节点配置
cp /usr/kafka/kafka_2.12-2.8.0/config/server.properties{,.bak}
- 总体配置设置
cat > /usr/kafka/kafka_2.12-2.8.0/config/server.properties << EOF broker.id=0 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 ##修改 log.dirs=/data/kafka/logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 ##修改 zookeeper.connect=192.168.31.165:2181,192.168.31.166:2181,192.168.31.167:2181 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0 listeners=PLAINTEXT://192.168.31.165:9092 EOF
- 分节点配置
cat /usr/kafka/kafka_2.12-2.8.0/config/server.properties #Kafka01 broker.id=0 listeners=PLAINTEXT://192.168.31.165:9092 #Kafka02 broker.id=1 listeners=PLAINTEXT://192.168.31.166:9092 #Kafka03 broker.id=2 listeners=PLAINTEXT://192.168.31.167:9092
- 防火墙开放
9092端口 - 启动Kafka
cd /usr/kafka/kafka_2.12-2.8.0 nohup bin/kafka-server-start.sh config/server.properties >> /var/log/kafka-server.log 2>&1 &
- 关闭Kafka
bin/kafka-server-stop.sh
- kafka测试
- 创建Topic
在kafka01(Broker)上创建测试Tpoic:test-ken-io,这里我们指定了3个副本Broker、test-ken-io有2个分区cd /usr/kafka/kafka_2.12-2.8.0 bin/kafka-topics.sh --create --bootstrap-server 192.168.31.165:9092 --replication-factor 3 --partitions 2 --topic test-ken-io
- Topic在kafka01上创建后也会同步到集群中另外两个副本Broker:kafka02、kafka03
- 查看Topic
我们可以通过命令列出指定Broker的topic信息cd /usr/kafka/kafka_2.12-2.8.0 bin/kafka-topics.sh --list --bootstrap-server 192.168.31.165:9092 bin/kafka-topics.sh --list --bootstrap-server 192.168.31.166:9092 bin/kafka-topics.sh --list --bootstrap-server 192.168.31.167:9092
- 发送消息
这里我们向Broker(id=0)的Topic=test-ken-io发送消息cd /usr/kafka/kafka_2.12-2.8.0 bin/kafka-console-producer.sh --broker-list 192.168.31.165:9092 --topic test-ken-io #消息内容 > hei body > hei girl
- 消费者
从开始位置消费cd /usr/kafka/kafka_2.12-2.8.0 bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.167:9092 --topic test-ken-io --from-beginning bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.166:9092 --topic test-ken-io --from-beginning bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.165:9092 --topic test-ken-io --from-beginning
然后均能收到消息
hei body
hei girl
从最新位置消费bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.165:9092 --topic test-ken-io
- 消费者组
一个Consumer group,多个consumer进程,数量小于等于partition分区的数量
test-ken-io只有2个分区,只能有两个消费者consumer进程去轮询消费消息bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.167:9092 --topic test-ken-io --group testgroup_ken bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.167:9092 --topic test-ken-io --group testgroup_ken
zk作用
- broker在zk中注册
kafka的每个broker(相当于一个节点,相当于一个机器)在启动时,都会在zk中注册,告诉zk其brokerid,在整个的集群中,broker.id/brokers/ids,当节点失效时,zk就会删除该节点,就很方便的监控整个集群broker的变化,及时调整负载均衡。[zk: 192.168.31.165:2181(CONNECTED) 73] ls /brokers/ids [0, 1, 2]
- topic在zk中注册
在kafka中可以定义很多个topic,每个topic又被分为很多个分区。一般情况下,每个分区独立在存在一个broker上,所有的这些topic和broker的对应关系都有zk进行维护[zk: 192.168.31.165:2181(CONNECTED) 73] ls /brokers/topics/test-ken-io/partitions [0]
- consumer(消费者)在zk中注册
注意:从kafka-0.9版本及以后,kafka的消费者组和offset信息就不存zookeeper了,而是存到broker服务器上。
所以,如果你为某个消费者指定了一个消费者组名称(group.id),那么,一旦这个消费者启动,这个消费者组名和它要消费的那个topic的offset信息就会被记录在broker服务器上。,但是zookeeper其实并不适合进行大批量的读写操作,尤其是写操作。因此kafka提供了另一种解决方案:增加__consumeroffsets topic,将offset信息写入这个topic[zk: 192.168.31.165:2181(CONNECTED) 83] ls /brokers/topics/__consumer_offsets/partitions [0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 5, 6, 7, 8, 9]
相关文章
暂无评论...