Kafka安装与配置

安装Zookeeper

安装Kafka必须先安装zookeeper,虽然Kafka内置了zookeeper,但是建议不用。我们全新安装部署一套。

注意:zookeeper 3.5.4版本需要JDK1.8以上版本支持

tar xzvf zookeeper-3.5.4-beta.tar.gz
cp -r zookeeper-3.5.4-beta /usr/local/zookeeper
cd /usr/local/zookeeper
## 创建存储目录和日志目录
mkdir data
mkdir logs
## 修改配置文件
cd conf
mv zoo_sample.cfg zoo.cfg

修改配置文件,主要修改存储目录和日志目录

dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs

集群模式

如果是集群环境,需要在每个服务器上都执行上述的操作,同时在每个集群服务器的zookeeper配置文件中都添加所有的服务配置:

server.{id}={ip}:{port1}:{port1}

上面的配置中的id1 开始,最多 255 ,并且需要将该id写入到服务器对应的dataDir目录下的myid文件中,例如

echo '1' > /usr/loca/zookeeper/data/myid

上面配置中的 ip 为集群环境中各个服务器的ip地址;

第一个端口是从follower连接到leader机器的端口,第二个端口是用来进行leader选举时的端口,所以集群配置中有三个非常重要的端口:

clientPort:2181
port:2888
port:3888

所以集群环境中服务器的配置可以如下所示(每台服务器都相同):

server.1=172.16.9.41:2888:3888
server.2=172.16.9.42:2888:3888
server.3=172.16.9.43:2888:3888

配置环境变量

在配置完zookeeper,需要配置环境变量

vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile

启动zookeeper

cd /usr/local/zookeeper/bin
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh restart
./zkServer.sh status

安装Scala

Kafka是基于Scala编写的,所以需要先安装Scala。我们下载的kafka包是kafka-2.12-1.1.1.tgz,表明需要依赖scala2.12版本,所以到scala官网下载了scala-2.12.6.tgz

将安装包上传到服务器

tar xzf scala-2.12.6.tgz
mv scala-2.12.6 /usr/local/scala
vi /etc/profile

配置环境变量:

export SCALA_HOME=/usr/local/scala
export PATH=$SCALA_HOME/bin:$PATH
source /etc/profile

安装Kafka

下载安装包kafka-2.12-1.1.1.tgz ,并将该安装包上传到服务器对应的目录;然后解压该安装包:

tar xzf kafka-2.12-1.1.1.tgz
mv kafka-2.12-1.1.1 /usr/local/kafka

配置Kafka

主要配置server.propertiesproducer.propertiesconsumer.properties 。分别用于配置broker、producer和consumer。

cd config

Broker配置

配置文件是 server.properties ,配置内容说明:

broker.id=0 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样
listeners=PLAINTEXT://192.168.40.129:9092 #服务端监听端口,如果不是集群不要打开!!!
advertised.listeners=PLAINTEXT://your.host.name:9092 #broker发布给生产者消费者的监听host,如果不配置,默认使用listeners配置的信息
port=9092 #当前kafka对外提供服务的端口默认是9092
num.network.threads=3 #网络处理的线程数,一般不变
num.io.threads=8 #I/O处理线程数,一般比磁盘数大
log.dirs=/usr/local/kafka/logs #消息存放的目录,多个用,隔开
num.recovery.threads.per.data.dir=1 #用于处理每个目录的日志的线程数,默认是1,可以调大。
auto.create.topics.enable=true #是否默认创建主题,默认为true。实际环境中最好改为false,通过显示手动创建主题。
socket.send.buffer.bytes=102400 #发送缓冲区buffer大小
socket.receive.buffer.bytes=102400 #接收缓冲区大小
socket.request.max.bytes=104857600 #接收请求的最大数,不能超过JVM的堆内存大小
num.partitions=1 #默认的分区数,一个topic默认一个分区数。分区数越多,能提高并发性,但是也会导致该broker需要处理更多的文件。如果自动创建主题,则由该值决定自动创建的主题的分区数。
log.retention.hours=168 #消息的持久化时间,默认168小时,也就是1周
log.retention.minutes=30 #与上面的二选一,这里是持久化30分钟
log.retention.bytes=1073741824 #消息持久化大小,默认1G
log.segment.bytes=1073741824 #消息分块大小,默认1G,超过该大小后会重新创建新的segment file
compression.type=snappy #日志传输时候的压缩格式,包括lz4,snappy,gzip,建议打开
compressed.topics=topic1
zookeeper.connect= localhost:2181 #配置zookeeper连接,如果多个用,隔开

我们一般需要修改的:

broker.id #每台机器必须唯一
zookeeper.connect #根据实际情况配置,多个zookeeper必须全部加进去,用,隔开
listeners #在配置集群的时候必须设置,不然以后的操作会报找不到leader的错误

集群配置

集群配置只需要在每台机器上安装上面broker配置对应的server.properties文件,必须保证broker.id 唯一。

操作系统调优

主要涉及到Kafka的操作系统参数包括:虚拟内存、网络子系统和磁盘挂载点。这些参数一般配置在 /etc/sysctl.conf 文件里。

虚拟内存

对于大多数依赖吞吐量的应用而言,应该尽量避免内存交换。内存页和磁盘之间的交换对Kafka各方面性能都有影响。

vi /etc/sysctl.conf
vm.swappiness=1 #标识内存使用到99%的时候再进行交换分区。应该尽可能使用内存,而不是磁盘
vm.dirty_background_ratio=5 #当内存中的“脏数据”超过5%时,就写入磁盘
vm.dirty_ratio=60 #如果内存中的“脏数据”超过60%,新的IO将会被阻止,引起阻塞
sysctl -p

通过如下命令查看脏数据

cat /proc/vmstat|egrep "dirty|writeback"

网络优化

vi /etc/sysctl.conf
# socket读写缓冲区
net.core.wmem_default=131072
net.core.rmem_default=131072
net.core.wmem_max=2097152
net.core.rmem_max=2097152
# TCP socket读写缓冲区
net.ipv4.tcp_wmem=4096 65536 2048000
net.ipv4.tcp_rmem=4096 65536 2048000
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_max_syn_backlog=65536
net.core.netdev_max_backlog=65536
sysctl -p

启动Kafka

cd bin
./kafka-server-start.sh -daemon ../config/server.properties &

创建Topic

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic ncqueue

上述脚本创建了1个副本(replication-factor)的topic,如果要创建3个,可以使用--replication-factor 3 。创建的副本数不能大于broker的数量。

分区 partitions 的数量一般是broker的数量的整数倍。

验证Topic是否创建成功

./kafka-topics.sh --list --zookeeper localhost:2181

Topic描述

./kafka-topics.sh --describe --zookeeper localhost:2181 --topic ncqueue
  • leader:负责处理消息的读和写,leader是从所有节点中随机选择的
  • replicas:列出所有的副本节点,不管节点是否在服务中
  • isr:列出正在服务中的副本节点

发送消息

./kafka-console-producer.sh --broker-list localhost:9092 --topic test

执行完后,进入输入界面,输入数据即可。

接收消息

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test

上面的命令只能获取以后的消息,如果要获取之前的消息,需要使用下面的语句:

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

猜你喜欢

转载自blog.csdn.net/twypx/article/details/81257715