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.相关术语介绍

  1. Broker
    Kafka集群包含一个或多个服务器,这种服务器被称为broker
  2. Topic
    每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
  3. Partition
    Partition是物理上的概念,每个Topic包含一个或多个Partition.
  4. Producer
    负责发布消息到Kafka broker
  5. Consumer
    消息消费者,向Kafka broker读取消息的客户端。
  6. 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集群配置

  1. 集群上配置要求一致,时间要求一致。
    安装时钟同步服务: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
  1. 测试时防火墙全部关闭,正式环境需要配置防火墙策略
    查看防火墙状态: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:关闭
  2. 配置集群IP与主机名映射关系
    原主机名 CentosA 修改为 kw37
vim /etc/sysconfig/network   
NETWORKING=yes
HOSTNAME=CentosA  修改为 kw37
NTPSERVERARGS=iburst

reboot 重启才能生效
IP和主机名的映射关系
vim /etc/hosts

  1. 配置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文件时候和主机配置是否对应正确

  1. kafka配置。
    在集群服务器上安装kafka服务。修改config文件
    vim config/server.properties
boker.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