linux下kafka安装,单机配置,集群配置
1.环境
Constos6.8
jdk1.8.0_181
2.JDK 安装,配置jdk环境变量
/usr/local/jdk
tar -zvxf jdk-8u11-linux-x64.tar.gz
配置jdk环境变量
/etc/profile文件的改变会涉及到系统的环境,也就是有关Linux环境变量的东西
所以,我们要将jdk配置到/etc/profile,才可以在任何一个目录访问jdk
[root@localhost local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_181 #jdk安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
通过命令source /etc/profile让profile文件立即生效
3.配置主机名修改
原主机名 CentosA 修改为 kw37
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=CentosA 修改为 kw37
NTPSERVERARGS=iburst
reboot 修改完主机名需要重启才能生效
4.IP和主机名的映射关系
修改hosts文件
vim /etc/hosts
5.相关术语介绍
-
Broker
Kafka集群包含一个或多个服务器,这种服务器被称为broker -
Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处) -
Partition
Partition是物理上的概念,每个Topic包含一个或多个Partition. -
Producer
负责发布消息到Kafka broker -
Consumer
消息消费者,向Kafka broker读取消息的客户端。 -
Consumer Group
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
6.zookeeper 启动
./config 修改 zoo_sample.cfg
cp zoo_sample.cfg zpp.cfg
vim zoo.cfg
将dtaDir 修改为 /root/zkdata 保存
创建指定的目录
mkdir /root/zkdata
跳转至zookeeper\bin目录下
start 启动
stop 关闭
status 查看状态
./zkServer.sh start/stop/status zoo.cfg
启动并检查zk状态
7.单机版kafka安装与操作
1.下载kafka到指定目录下,并解压。
2.打开 server.properties
vim config/server.properties
boker.id=0 服务节点标识。单机模式下无需修改,集群模式下需要手动修改
listeners=PLAINTEXT://kw39:9092 监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
log.dirs=/liushao/logs kafka的Broker节点存储日志位置。目录由kafka启动时创建,需保证启动kafka服务的用户拥有创建文件夹的操作权限
zookeeper.connect=kw39:2181 zk连接参数
3.kafka启动/关闭
- 启动:
-daemon 已后台方式启动。缺省时默认服务存活于当前会话,连接窗口断开就关闭
./bin/kafka-server-start.sh -daemon config/server.properties
启动成功可用jps查看
[root@kw39 kafka_2.11-1.1.1]# jps
10600 Jps
8878 QuorumPeerMain
10527 Kafka
也可在log.dirs对应目录下看到如下文件
[root@kw39 kafka_2.11-1.1.1]# ls /liushao/logs/
cleaner-offset-checkpoint meta.properties replication-offset-checkpoint
log-start-offset-checkpoint recovery-point-offset-checkpoint
- 关闭:
./bin/kafka-server-stop.sh
4.topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
- 创建topic
2.2.0之前的kafka版本使用 zookeeper 这里的端口使用 2181
2.2.0开始zookeeper参数废弃,开始使用 bootstrap-server 这里的端口使用 9092
./bin/kafka-topics.sh --zookeeper kw39:2181 --create --topic topic02 --partitions3 --replication-factor 2
./bin/kafka-topics.sh --bootstrap-server kw39:9092 --create --topic topic01 --partitions 1 --replication-factor 1
topic topic01 消息名称
partitions 1 分区数
replication-factor 1 副本因子 (副本因子数量不能超过分区数)
5.Consumer
消息消费者,向Kafka broker读取消息的客户端。
./bin/kafka-console-consumer.sh --zookeeper 10.9.50.67:2181 --topic example --group g2
6.Producer
负责发布消息到Kafka broker
./bin/kafka-console-producer.sh --broker-list kw39:9092 --topic topic01
8.kafka集群配置
-
集群上配置要求一致,时间要求一致。
安装时钟同步服务:yum install ntp -y使用命令进行时钟同步:
ntpdate ntp1.aliyun.com
clock -w[root@kw39 kafka_2.11-1.1.1]# ntpdate ntp1.aliyun.com 11 Jan 09:45:44 ntpdate[25912]: step time server 120.25.115.20 offset -248.862495 sec [root@kw39 kafka_2.11-1.1.1]# clock -w
-
测试时防火墙全部关闭,正式环境需要配置防火墙策略
查看防火墙状态:service iptables status
开启防火墙:service iptables start
关闭防火墙:service iptables stop
[root@kw39 kafka_2.11-1.1.1]# chkconfig --list |grep iptables
iptables 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭 -
配置集群IP与主机名映射关系
原主机名 CentosA 修改为 kw37vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=CentosA 修改为 kw37 NTPSERVERARGS=iburst
reboot 重启才能生效
IP和主机名的映射关系
vim /etc/hosts -
配置ZK集群节点和kafka集群端口
ZK配置。
在集群服务器上安装ZK服务。修改zoo.cfg文件
vim zoo.cfg将dtaDir 修改为 /root/zkdata 在文件最后加上服务节点信息 节点名 = 主机名:数据同步端口:主从选举端口 server.1=kw37:2888:3888 server.2=kw38:2888:3888 server.3=kw39:2888:3888
保存后 创建目录 mkdir /root/zkdata
需要在zkdata下创建myid文件。在文件中写入当前服务的ID号echo 1> /root/zkdata/myid echo 2> /root/zkdata/myid echo 3> /root/zkdata/myid
全都配置完成后,分别启动服务。
./bin/zkServer.sh start/stop/status zoo.cfg如果启动失败时,检查防火墙是否全部关闭。检查myid文件时候和主机配置是否对应正确
-
kafka配置。
在集群服务器上安装kafka服务。修改config文件
vim config/server.propertiesboker.id=0 服务节点标识。单机模式下无需修改,集群模式下需要手动修改 listeners=PLAINTEXT://kw37:9092 监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。 log.dirs=/liushao/logs kafka的Broker节点存储日志位置。目录由kafka启动时创建,需保证启动kafka服务的用户拥有创建文件夹的操作权限 zookeeper.connect=kw37:2181,kw38:2181,kw39:2181 zk连接参数
9.kafka命令
-
启动:
-daemon 已后台方式启动。缺省时默认服务存活于当前会话,连接窗口断开就关闭
./bin/kafka-server-start.sh -daemon config/server.properties -
关闭:
./bin/kafka-server-stop.sh -
查看topic
-ls /liushao/logs 可以查看对应的topic节点信息
./bin/kafka-topics.sh --zookeeper kw37:2181,kw38:2181,kw39:2181 --list
./bin/kafka-topics.sh --bootstrap-server kw37:9092,kw38:9092,kw39:9092 --list -
查看topic详情
./bin/kafka-topics.sh --bootstrap-server kw37:9092,kw38:9092,kw39:9092 --describe[root@kw39 logs]# /liushao/kafka_2.11-1.1.1/bin/kafka-topics.sh --zookeeper kw39:2181 -- describe Topic:topic01 PartitionCount:1 ReplicationFactor:1 Configs: Topic: topic01 Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001 Topic:topic02 PartitionCount:3 ReplicationFactor:1 Configs: Topic: topic02 Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001 Topic: topic02 Partition: 1 Leader: 1001 Replicas: 1001 Isr: 1001 Topic: topic02 Partition: 2 Leader: 1001 Replicas: 1001 Isr: 1001
-
修改分区 分区只能增加不能减少
./bin/kafka-topics.sh --zookeeper kw37:2181,kw38:2181,kw39:2181 --alert --topic topic01 --partitions 2 -
删除分区
./bin/kafka-topics.sh --zookeeper kw37:2181,kw38:2181,kw39:2181 --delete --topic topic01 -
Consumer
消息消费者,向Kafka broker读取消息的客户端。
./bin/kafka-console-consumer.sh --zookeeper kw37:2181,kw38:2181,kw39:2181 --topic topic02 --group g1 -
Producer
负责发布消息到Kafka broker
./bin/kafka-console-producer.sh --broker-list kw37:9092,kw38:9092,kw39:9092 --topic topic01