Kafka值生产者重要参数
- acks:
- acks: 指定发送消息之后,Broker端至少有多少个副本接收到该消息;默认为acks=1;
- acks=0: 生产者发送消息之后不需要等待任何服务端的响应;
- acks=-1 acks=all: 生产者在消息发送之后,需要等待ISR中的所有副本都成功写入消息之后才能够收到来自服务端的成功响应。
- A1: acks= -1 or acks=all 是不是一定能够保障消息的可靠性呢?
- Q1: 不能,如果当时副本都出入OSR中,这个时候acks=-1 or acks=all 表示主副本收到消息之后就返回,可以配合这个参数使用
min.insync.replicas
= 2,表示至少有多少个副本同步到数据之后返回。
- 其他重要参数:
## max.request.size:
该参数用来限制生产者客户端能发送的消息的最大值
## retries和retry.backoff.msretries:
重试次数和重试间隔,默认100
## compression.type:
这个参数用来指定消息的压缩方式,默认值为“none”,可选配置:“gzip”“snappy”和“lz4”
## connections.max.idle.ms :
这个参数用来指定在多久之后关闭限制的连接,默认值是540000(ms),即9分钟;
## linger.ms:
这个参数用来指定生产者发送 ProducerBatch 之前等待更多消息(ProducerRecord)加入ProducerBatch
的时间,默认值为 0
## batch.size:
累计多少条消息,则一次进行批量发送;
## buffer.memory:
缓存提升性能参数,默认为32M
## receive.buffer.bytes:
这个参数用来设置Socket接收消息缓冲区(SO_RECBUF)的大小,默认值为32768(B),即32KB;
## send.buffer.bytes:
这个参数用来设置Socket发送消息缓冲区(SO_SNDBUF)的大小,默认值为131072(B),即128KB。
## request.timeout.ms:
这个参数用来配置Producer等待请求响应的最长时间,默认值为30000(ms)
Kafka值消费者重要参数
- 消费者与消费者组的关系
- 每一个消费者组都属于一个消费者组,多个消费者属于同一个消费者组的时候,生产者生产的消息会被这同一个消费者组的多个消费者消费,并且不重复。
- 多个消费者属于不同消费者组的时候,生产者生产的消息会被不同消费者组的消费者都消费一次,相当于是一个广播的效果。
Zookeeper集群环境搭建:
1. 准备工作:
## 准备3个节点,要求配置好主机名称,服务器之间系统时间保持一致
## 注意 /etc/hostname 和 /etc/hosts 配置主机名称(在这个里我准备bhz221,bhz222,bhz223三节点)
## 特别注意 以下操作3个节点要同时进行操作哦!
## 注意关闭防火墙
1.启动防火墙systemctl start firewalld
2.关闭防火墙systemctl stop firewalld
3.重启防火墙systemctl restart firewalld
4.查看防火墙状态systemctl status firewalld
5.开机禁用防火墙systemctl disable firewalld
## 本地访问:ping
2. 上传zk到三台服务器节点
## 注意我这里解压到/usr/local下
## 2.1 进行解压:
cd /usr/local/software
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/
## 跳转到cd /usr/local/
cd ..
## 2.2 修改环境变量: vim /etc/profile
## 这里要添加zookeeper的全局变量
export JAVA_HOME=/usr/local/jdk1.8
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
export PATH=.:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
## 2.3 刷新环境变量:
source /etc/profile
## 2.4 到zookeeper下修改配置文件:
## 2.5.1 首先到指定目录:
cd /usr/local/zookeeper-3.4.6/conf
## 2.5.2 然后复制zoo_sample.cfg文件,复制后为zoo.cfg:
mv zoo_sample.cfg zoo.cfg
## 2.5.3 vim zoo.cfg 然后修改两处地方, 最后保存退出:
vim /usr/local/zookeeper-3.4.6/conf/zoo.cfg
(1) 修改数据的dir
dataDir=/usr/local/zookeeper-3.4.6/data
(2) 修改集群地址
server.0=bhz221:2888:3888
server.1=bhz222:2888:3888
server.2=bhz223:2888:3888
## 2.5.4 增加服务器标识配置,需要2步骤,第一是创建文件夹和文件,第二是添加配置内容:
(1) 创建文件夹:
mkdir /usr/local/zookeeper-3.4.6/data
(2) 创建文件myid 路径应该创建在/usr/local/zookeeper-3.4.6/data下面,如下:
vim /usr/local/zookeeper-3.4.6/data/myid
## 2.5.5 注意这里每一台服务器的myid文件内容不同,分别修改里面的值为0,1,2;
## 与我们之前的zoo.cfg配置文件里:server.0,server.1,server.2 顺序相对应,然后保存退出;
## 2.6 到此为止,Zookeeper集群环境大功告成!启动zookeeper命令
启动路径:/usr/local/zookeeper-3.4.6/bin(也可在任意目录,因为配置了环境变量)
执行命令:zkServer.sh start (注意这里3台机器都要进行启动,启动之后可以查看状态)
查看状态:zkServer.sh status (在三个节点上检验zk的mode, 会看到一个leader和俩个follower)
集群关闭:zkServer.sh stop
## zkCli.sh 进入zookeeper客户端
根据提示命令进行操作:
查找:ls / ls /zookeeper
创建并赋值: create /imooc zookeeper
获取: get /imooc
设值: set /imooc zookeeper1314
PS1: 任意节点都可以看到zookeeper集群的数据一致性
PS2: 创建节点有俩种类型:短暂(ephemeral) 持久(persistent), 这些小伙伴们可以查找相关资料,我们这里作为入门不做过多赘述!
开机启动:
cd /etc/rc.d/init.d/
touch zookeeper
chmod 777 zookeeper
vim zookeeper
开机启动zookeeper脚本:
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
case $1 in
start) /usr/local/zookeeper-3.4.6/bin/zkServer.sh start;;
stop) /usr/local/zookeeper-3.4.6/bin/zkServer.sh stop;;
status) /usr/local/zookeeper-3.4.6/bin/zkServer.sh status;;
restart) /usr/local/zookeeper-3.4.6/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
开机启动配置:chkconfig zookeeper on
验证:
chkconfig --add zookeeper
chkconfig --list zookeeper
这个时候我们就可以用servicezookeeper start/stop来启动停止zookeeper服务了
使用chkconfig--add zookeeper命令把zookeeper添加到开机启动里面
添加完成之后接这个使用chkconfig--list 来看看我们添加的zookeeper是否在里面
如果上面的操作都正常的话;你就可以重启你的linux服务器了
kafka集群环境搭建
kafka 环境搭建
- kafka环境搭建准备:
- 准备zookeeper环境(zookeeper-3.4.6)
- 下载kafka安装包:https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz
- 上传到:192.168.11.221
- 搭建kafka环境:
## 1 解压kafka_2.12-2.1.0.tgz.gz包到/usr/local/
tar -zxvf kafka_2.12-2.1.0.tgz.gz -C /usr/local/
## 2 重命名kafka_2.12
cd /usr/local
mv kafka_2.12-2.1.0 kafka_2.12
## 3 修改kafka配置文件
vim /usr/local/kafka_2.12/config/server.properties
## 修改内容:
## The id of the broker. This must be set to a unique integer for each broker
broker.id=0
port=9092
host.name=192.168.11.221
dvertised.host.name=192.168.11.221
log.dirs=/usr/local/kafka_2.12/kafka-logs
num.partitions=5
zookeeper.connect=192.168.11.221:2181,192.168.11.222:2181,192.168.11.223:2181
## 4 创建kafka存储消息(log日志数据)的目录
mkdir /usr/local/kafka_2.12/kafka-logs
## 5 到此为止,kafka已经配置成功,执行启动命令,启动kafka
/usr/local/kafka_2.12/bin/kafka-server-start.sh /usr/local/kafka_2.12/config/server.properties &
## 6 安装kafka manager可视化管控台:把jar包(kafka manager)上传到 192.168.11.222
## 6.1 解压zip文件
unzip kafka-manager-2.0.0.2.zip -d /usr/local/
## 6.2 修改配置文件:
vim /usr/local/kafka-manager-2.0.0.2/conf/application.conf
## 修改内容:
kafka-manager.zkhosts="192.168.11.221:2181,192.168.11.222:2181,192.168.11.223:2181"
## 6.3 192.168.11.222节点启动kafka manager 控制台
/usr/local/kafka-manager-2.0.0.2/bin/kafka-manager &
## 6.4 浏览器访问控制台:默认端口号是9000
http://192.168.11.222:9000/
## 6.5 添加Cluster集群
## 7 集群验证:
## 7.1 通过控制台创建了一个topic为"test" 2个分区 1个副本
## 7.2 消费发送与接收验证
cd /usr/local/kafka_2.12/bin
## 启动发送消息的脚本
## --broker-list 192.168.11.221 指的是kafka broker的地址列表
## --topic test 指的是把消息发送到test主题
kafka-console-producer.sh --broker-list 192.168.11.221:2181 --topic test
## 启动接收消息的脚本
kafka-console-consumer.sh --bootstrap-server 192.168.11.221:9092 --topic test