Kafka集群

Kafka集群部署

 

http://kafka.apache.org/documentation
http://kafka.apachecn.org

实验环境

study62study63study64
zk zk zk
kafka kafka kafka

jdk安装

每台主机都需要安装,此处以study62主机为例

[root@study62 ~]# mkdir /opt/src 
[root@study62 ~]# cd /opt/src  
[root@study62 src]# ll
total 190524
-rw-r--r-- 1 root root 195094741 Dec 25  2019 jdk-8u221-linux-x64.tar.gz
[root@study62 src]# mkdir /usr/java
[root@study62 src]# tar xf jdk-8u221-linux-x64.tar.gz -C /usr/java
[root@study62 src]# ln -s /usr/java/jdk1.8.0_221 /usr/java/jdk
[root@study62 src]# vi /etc/profile

export JAVA_HOME=/usr/java/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

[root@study62 src]# source /etc/profile
[root@study62 src]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

zookeeper安装部署

每台主机都需要安装,此处以study62主机为例

zk下载地址

zookeeper

[root@study62 src]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

解压zookeeper并创建数据日志存放目录

[root@study62 src]# tar xf zookeeper-3.4.14.tar.gz -C /opt/
[root@study62 src]# ln -s /opt/zookeeper-3.4.14 /opt/zookeeper
[root@study62 src]# mkdir -pv /data/zookeeper/data /data/zookeeper/logs
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/zookeeper’
mkdir: created directory ‘/data/zookeeper/data’
mkdir: created directory ‘/data/zookeeper/logs’

修改配置文件zoo.cfg

[root@study62 src]# cd /opt/zookeeper
[root@study62 zookeeper]# vi /opt/zookeeper/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.0=10.0.0.62:2888:3888
server.1=10.0.0.63:2888:3888
server.2=10.0.0.64:2888:3888
  ①、tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime

  ②、dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。

  ③、client:监听客户端连接的端口。

  ④、initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

  ⑤、syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

  ⑥、server.A=B:C:D

    A:其中 A 是一个数字,表示这个是服务器的编号;

    B:是这个服务器的 ip 地址或域名(生产尽量使用域名)或主机名;

    C:Leader选举的端口;

    D:Zookeeper服务器之间的通信端口。

  我们需要修改的第一个是 dataDir ,在指定的位置处创建好目录。

  第二个需要新增的是 server.A=B:C:D 配置,其中 A 对应下面我们即将介绍的myid 文件。B是集群的各个IP地址,C:D 是端口配置。

创建myid文件

[root@study62 src]# vi /data/zookeeper/data/myid  
0
[root@study63 src]# vi /data/zookeeper/data/myid  
1
[root@study64 src]# vi /data/zookeeper/data/myid  
2

配置环境变量

[root@study62 zookeeper]# vi /etc/profile
#set zookeeper environment
export ZK_HOME=/opt/zookeeper
export PATH=$PATH:$ZK_HOME/bin
[root@study62 zookeeper]# source /etc/profile

启动zookeeper服务

  • 启动命令
[root@study62 ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 停止命令
[root@study62 ~]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
  • 重启命令
[root@study62 ~]# zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 查看集群状态命令
[root@study62 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

[root@study63 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader

[root@study64 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower

三台机器,study63 成功的通过了选举称为了leader,而剩下的两台成为了 follower。这时候,如果你将study63关掉,会发现剩下两台又会有一台变成了 leader节点。

Kafka集群安装部署

kafka下载

下载地址

[root@study62 src]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.4.0/kafka_2.13-2.4.0.tgz

安装

[root@study62 src]# tar xf kafka_2.13-2.4.0.tgz -C /opt/
[root@study62 src]# ln -s /opt/kafka_2.13-2.4.0 /opt/kafka
[root@study64 src]# ll /opt/kafka/
total 56
drwxr-xr-x 3 root root  4096 Dec 10  2019 bin
drwxr-xr-x 2 root root  4096 Dec 10  2019 config
drwxr-xr-x 2 root root  8192 Dec  9 19:23 libs
-rw-r--r-- 1 root root 32216 Dec 10  2019 LICENSE
-rw-r--r-- 1 root root   337 Dec 10  2019 NOTICE
drwxr-xr-x 2 root root    44 Dec 10  2019 site-docs

配置

broker.id=0
[root@study62 ~]# cd /opt/kafka
[root@study62 kafka]# mkdir -p /data/kafka/logs
[root@study62 kafka]# [root@study62 kafka]# vi /opt/kafka/config/server.properties 
log.dirs=/data/kafka/logs
zookeeper.connect=10.0.0.62:2181,10.0.0.63:2181,10.0.0.64:2181
log.flush.interval.messages=10000
log.flush.interval.ms=1000
delete.topic.enable=true
host.name=study62
broker.id=1
[root@study63 ~]# cd /opt/kafka
[root@study63 kafka]# mkdir -p /data/kafka/logs
[root@study63 kafka]# [root@study62 kafka]# vi /opt/kafka/config/server.properties 
log.dirs=/data/kafka/logs
zookeeper.connect=10.0.0.62:2181,10.0.0.63:2181,10.0.0.64:2181
log.flush.interval.messages=10000
log.flush.interval.ms=1000
delete.topic.enable=true
host.name=study63
broker.id=2
[root@study64 ~]# cd /opt/kafka
[root@study64 kafka]# mkdir -p /data/kafka/logs
[root@study64 kafka]# [root@study62 kafka]# vi /opt/kafka/config/server.properties 
log.dirs=/data/kafka/logs
zookeeper.connect=10.0.0.62:2181,10.0.0.63:2181,10.0.0.64:2181
log.flush.interval.messages=10000
log.flush.interval.ms=1000
delete.topic.enable=true
host.name=study64

启动集群

[root@study62 kafka]# bin/kafka-server-start.sh -daemon config/server.properties 
[root@study63 kafka]# bin/kafka-server-start.sh -daemon config/server.properties 
[root@study64 kafka]# bin/kafka-server-start.sh -daemon config/server.properties

关闭集群

[root@study62 kafka]# bin/kafka-server-stop.sh stop
[root@study63 kafka]# bin/kafka-server-stop.sh stop
[root@study64 kafka]# bin/kafka-server-stop.sh stop

验证检查

[root@study62 kafka]# ps aux | grep kafka

[root@study62 kafka]# netstat -luntp | grep 9092
tcp6       0      0 10.0.0.62:9092          :::*                    LISTEN      11115/java

查看当前jps

[root@study62 kafka]# jps -l
8802 org.apache.zookeeper.server.quorum.QuorumPeerMain
11282 sun.tools.jps.Jps
11115 kafka.Kafka

常用命令

创建一个topic

# 创建一个名为first的topic,它由两个分区和两个副本
[root@study62 kafka]# bin/kafka-topics.sh --create --zookeeper study62:2181 --partitions 2 --replication-factor 2 --topic first
Created topic first.

查看topic

[root@study62 kafka]# bin/kafka-topics.sh --list --zookeeper study62:2181
first

启动一个producer发送一些消息

[root@study62 kafka]# bin/kafka-console-producer.sh --broker-list study62:9092 --topic first
> This is a message
> This is another message

启动一个 consumer

[root@study63 kafka]# bin/kafka-console-consumer.sh --bootstrap-server study62:9092 --topic first --from-beginning 
This is a message
This is another message

topic列表

[root@study64 kafka]# bin/kafka-topics.sh --list --zookeeper study62:2181
__consumer_offsets
first

查看topic详情

[root@study64 kafka]# bin/kafka-topics.sh --zookeeper study62:2181 --describe --topic first
Topic: first    PartitionCount: 2       ReplicationFactor: 2    Configs: 
        Topic: first    Partition: 0    Leader: 0       Replicas: 0,1   Isr: 0,1
        Topic: first    Partition: 1    Leader: 1       Replicas: 1,2   Isr: 1,2

删除topic

[root@study62 kafka]# bin/kafka-topics.sh --zookeeper study62  --delete --topic first
Topic first is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

创建不同选项的topic

[root@study62 kafka]# bin/kafka-topics.sh --create --zookeeper study62:2181 --partitions 1 --replication-factor 3 --topic first
Created topic first.
[root@study62 kafka]# ll /data/kafka/logs/
drwxr-xr-x 2 root root 141 Dec 10 13:00 first-0

kafka消费者组

[root@study63 kafka]# bin/kafka-console-consumer.sh --bootstrap-server study62:9092 --topic first --consumer-property group.id=test

附kafka配置文件详解

broker.id=0  #当前机器在集群中的唯一标识,和zookeeper的myid性质一样
port=9092 #当前kafka对外提供服务的端口默认是9092
num.network.threads=3 #这个是borker进行网络处理的线程数
num.io.threads=8 #这个是borker进行I/O处理的线程数
log.dirs=/opt/kafka/kafkalogs/ #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
socket.send.buffer.bytes=102400 #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.receive.buffer.bytes=102400 #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.request.max.bytes=104857600 #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
num.partitions=1 #默认的分区数,一个topic默认1个分区数
log.retention.hours=168 #默认消息的最大持久化时间,168小时,7天
message.max.byte=5242880  #消息保存的最大值5M
default.replication.factor=2  #kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
replica.fetch.max.bytes=5242880  #取消息的最大直接数
log.segment.bytes=1073741824 #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.retention.check.interval.ms=300000 #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除
log.cleaner.enable=false #是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=localhost:12181#设置zookeeper的连接端口
posted @ 2020-05-07 09:42  renato-zhang  阅读(154)  评论(0编辑  收藏  举报