Hdoop学习笔记(HDP)-Part.19 安装Kafka

目录
Part.01 关于HDP
Part.02 核心组件原理
Part.03 资源规划
Part.04 基础环境配置
Part.05 Yum源配置
Part.06 安装OracleJDK
Part.07 安装MySQL
Part.08 部署Ambari集群
Part.09 安装OpenLDAP
Part.10 创建集群
Part.11 安装Kerberos
Part.12 安装HDFS
Part.13 安装Ranger
Part.14 安装YARN+MR
Part.15 安装HIVE
Part.16 安装HBase
Part.17 安装Spark2
Part.18 安装Flink
Part.19 安装Kafka
Part.20 安装Flume

十九、安装Kafka

1.安装kafka

选择kafka进行安装

选择hdp03-05作为kafka的broker

Log directories:/data01/kafka-logs



2.安装kafka manager

下载链接:
https://gitcode.net/mirrors/yahoo/kafka-manager/-/archive/master/kafka-manager-master.tar.gz

在具有sbt编译环境的服务器(需要外网环境)上,对kafka-manager进行编译

shell 复制代码
unzip kafka-manager-2.0.0.2.zip -d /usr/local/

修改配置文件,/usr/local/kafka-manager-2.0.0.2/conf/application.conf

修改zookeeper连接地址

shell 复制代码
kafka-manager.zkhosts="hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181"

启动kafka-manager

shell 复制代码
cd /usr/local/kafka-manager-2.0.0.2/bin/
nohup bin/kafka-manager >/dev/null 2>&1 &

访问页面http://hdp01.hdp.com:9000

创建kafka集群

Cluster Name:hdp315,自定义名称

Cluster Zookeeper Hosts:hdp01.hdp.com:2181,hdp02.hdp02.com:2181,hdp03.hdp.com:2181

3.启用kerberos配置确认

(1)ZooKeeper开启kerberos认证

ZooKeeper账号信息

shell 复制代码
klist -ket /etc/security/keytabs/zk.service.keytab


jaas认证信息

/usr/hdp/3.1.5.0-152/zookeeper/conf/zookeeper_jaas.conf

/usr/hdp/3.1.5.0-152/zookeeper/conf/zookeeper_client_jaas.conf

com.sun.security.auth.module.Krb5LoginModule这个是类名,是kerberos对JAAS中的LoginModule的实现;required表示必须进行校验;其他几个是kerberos相关参数;后面会将该配置文件地址配置到jvm参数,其中的信息会被初始化到LoginContext上下文对象中。另外注意格式以及末尾的;分号。

开启sasl/kerberos认证 ,/usr/hdp/3.1.5.0-152/zookeeper/conf/zoo.cfg

(2)Kafka账号信息

Ambari自动创建的kafka账号信息如下

shell 复制代码
klist -kte /etc/security/keytabs/kafka.service.keytab
(3)Kafka服务端配置

jaas认证信息 ,/usr/hdp/3.1.5.0-152/kafka/config/kafka_jaas.conf

KafkaServer:Kafka服务端

KafkaClient:Kafka客户端

Client:ZooKeeper客户端

Kerberos认证有两种方式,即利用票证缓存和指定keytab。

要使用存储在票证缓存中的Kerberos票证:

shell 复制代码
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;

要使用keytab:

shell 复制代码
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/etc/security/keytabs/alice.keytab" principal="alice@EXAMPLE.COM";

开启sasl/kerberos认证 ,/usr/hdp/3.1.5.0-152/kafka/config/server.properties

核心配置如下

shell 复制代码
advertised.listeners=SASL_PLAINTEXT://hdp03.hdp.com:6667
listeners=SASL_PLAINTEXT://hdp03.hdp.com:6667
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka
sasl.mechanism.inter.broker.protocol=GSSAPI
security.inter.broker.protocol=SASL_PLAINTEXT
(4)Kafka客户端配置

jaas认证信息 ,/usr/hdp/3.1.5.0-152/kafka/config/kafka_client_jaas.conf

开启sasl/kerberos认证,新建文件/root/client.properties

shell 复制代码
security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka
sasl.mechanism=GSSAPI

4.Controller/Broker确认

Broker在启动时,会尝试去ZooKeeper中创建/controller节点。Kafka当前选举控制器的规则是:第一个成功创建/controller节点的Broker会被指定为控制器。同样,也会在zookeeper的/brokers/ids下创建一个临时znode。当broker宕机或主动关闭后,该broker与ZooKeeper的会话结束,这个znode会被自动删除。

zookeeper中还有一个与控制器有关的/controller_epoch持久节点,节点中存放的是一个整型的controller_epoch值(初始值为1)。controller_epoch用于记录控制器发生变更的次数,即记录当前的控制器是第几代控制器,也可以称为"控制器的纪元"。

在kafka集群中,首先启动hdp03节点,此时controller选举为hdp03,且broker下也只有hdp03,并且可以看到相关的详细信息。

shell 复制代码
ls /controller
get /controller
shell 复制代码
ls /brokers/ids
get /brokers/ids/1001

之后在kafka集群中增加节点hdp04,此时可以看到controller仍是hdp03,但broker下已经有hdp04节点。

shell 复制代码
ls /controller
get /controller
shell 复制代码
ls /brokers/ids
get /brokers/ids/1002

5.其他配置确认

(1)权限控制

Kafka本身自带有一个授权的类kafka.security.auth.SimpleAclAuthorizer,可在server.properties配置,分为Acl和Ranger两种方式。

Acl控制

shell 复制代码
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

Ranger控制

shell 复制代码
authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer

当添加权限控制后,会在zk中创建2个节点

节点1:存储ACL信息节点kafka-acl

节点2:存储ACL变更信息节点kafka-acl-changes

(2)listeners/advertised.listeners

内网发布地址用listeners,对外网发布地址时用advertised.listeners

6.常用指令

创建topic

shell 复制代码
./kafka-topics.sh --create --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --replication-factor 3 --partitions 3 --topic test-topic

partitions 指定topic分区数,控制topic将分片成多少个log。可以显示指定,如果不指定则会使用broker(server.properties)中的num.partitions配置的数量

虽然增加分区数可以提供kafka集群的吞吐量、但是过多的分区数或者或是单台服务器上的分区数过多,会增加不可用及延迟的风险。因为多的分区数,意味着需要打开更多的文件句柄、增加点到点的延时、增加客户端的内存消耗;分区数也限制了consumer的并行度,即限制了并行consumer消息的线程数不能大于分区数;分区数也限制了producer发送消息是指定的分区。如创建topic时分区设置为1,producer发送消息时通过自定义的分区方法指定分区为2或以上的数都会出错的;这种情况可以通过alter --partitions 来增加分区数。
replication-factor 指定topic每个分区的副本数,控制消息保存在几个broker(服务器)上,一般情况下等于broker的个数。如果没有在创建时显示指定或通过API向一个不存在的topic生产消息时会使用broker(server.properties)中的default.replication.factor配置的数量。
查看所有topic列表

shell 复制代码
./kafka-topics.sh  --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --list

查看指定topic信息

shell 复制代码
./kafka-topics.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --describe --topic test-topic

控制台向topic生产数据

shell 复制代码
./kafka-console-producer.sh --broker-list hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --topic test-topic

控制台消费topic的数据

shell 复制代码
./kafka-console-consumer.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --topic test-topic --from-beginning

增加topic分区数

shell 复制代码
./kafka-topics.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --alter --topic test-topic --partitions 10

删除topic

shell 复制代码
./kafka-topics.sh --delete --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --topic test-topic

只会删除zookeeper中的元数据,消息文件须手动删除

在zookeeper中,以kafka登录后删除对应的文件

shell 复制代码
kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/hdp03.hdp.com@HDP315.COM
/usr/hdp/3.1.5.0-152/zookeeper/bin/zkCli.sh -server hdp01:2181,hdp02:2181,hdp03:2181
rmr /admin/delete_topics/test-topic
rmr /brokers/topics/test-topic

查看topic消费进度

shell 复制代码
./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1
显示出consumer group的offset情况,必须参数为--group,不指定--topic,默认为所有topic

查看topic某分区偏移量最大(小)值

shell 复制代码
./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test-topic --time -1 --broker-list hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --partitions 0

time为-1时表示最大值,time为-2时表示最小值
列出所有topic的用户组列表

shell 复制代码
./kafka-consumer-groups.sh --bootstrap-server hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --list

7.实验:发布订阅

以hdp03作为producer,hdp04作为consumer

【hdp03】上执行启动生产者,并输入随机字符

shell 复制代码
kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/hdp03.hdp.com@HDP315.COM
./kafka-console-producer.sh --broker-list hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --topic test-topic --producer.config /root/producer.properties

【hdp04】上执行启动消费者,观察hdp03上输入字符后在hdp04上显示的内容

shell 复制代码
kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/hdp03.hdp.com@HDP315.COM
./kafka-console-producer.sh --broker-list
./kafka-console-consumer.sh --bootstrap-server hdp03.hdp.com:6667 --topic test-topic --consumer.config /root/consumer.properties

虽然增加分区数可以提供kafka集群的吞吐量、但是过多的分区数或者或是单台服务器上的分区数过多,会增加不可用及延迟的风险。因为多的分区数,意味着需要打开更多的文件句柄、增加点到点的延时、增加客户端的内存消耗;分区数也限制了consumer的并行度,即限制了并行consumer消息的线程数不能大于分区数;分区数也限制了producer发送消息是指定的分区。如创建topic时分区设置为1,producer发送消息时通过自定义的分区方法指定分区为2或以上的数都会出错的;这种情况可以通过alter --partitions 来增加分区数。

replication-factor指定topic每个分区的副本数,控制消息保存在几个broker(服务器)上,一般情况下等于broker的个数。如果没有在创建时显示指定或通过API向一个不存在的topic生产消息时会使用broker(server.properties)中的default.replication.factor配置的数量。

查看所有topic列表

./kafka-topics.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --list

查看指定topic信息

./kafka-topics.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --describe --topic test-topic

控制台向topic生产数据

./kafka-console-producer.sh --broker-list hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --topic test-topic

控制台消费topic的数据

./kafka-console-consumer.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --topic test-topic --from-beginning

增加topic分区数

./kafka-topics.sh --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --alter --topic test-topic --partitions 10

删除topic

./kafka-topics.sh --delete --zookeeper hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181 --topic test-topic

只会删除zookeeper中的元数据,消息文件须手动删除

在zookeeper中,以kafka登录后删除对应的文件

kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/hdp03.hdp.com@HDP315.COM

/usr/hdp/3.1.5.0-152/zookeeper/bin/zkCli.sh -server hdp01:2181,hdp02:2181,hdp03:2181

rmr /admin/delete_topics/test-topic

rmr /brokers/topics/test-topic

查看topic消费进度

./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1

显示出consumer group的offset情况,必须参数为--group,不指定--topic,默认为所有topic

查看topic某分区偏移量最大(小)值

./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test-topic --time -1 --broker-list hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --partitions 0

time为-1时表示最大值,time为-2时表示最小值

列出所有topic的用户组列表

./kafka-consumer-groups.sh --bootstrap-server hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --list

7.实验:发布订阅

以hdp03作为producer,hdp04作为consumer

【hdp03】上执行启动生产者,并输入随机字符

kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/hdp03.hdp.com@HDP315.COM

./kafka-console-producer.sh --broker-list hdp03.hdp.com:6667,hdp04.hdp.com:6667,hdp05.hdp.com:6667 --topic test-topic --producer.config /root/producer.properties

【hdp04】上执行启动消费者,观察hdp03上输入字符后在hdp04上显示的内容

kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/hdp03.hdp.com@HDP315.COM

./kafka-console-producer.sh --broker-list

./kafka-console-consumer.sh --bootstrap-server hdp03.hdp.com:6667 --topic test-topic --consumer.config /root/consumer.properties

相关推荐
yatingliu201936 分钟前
HiveQL | 个人学习笔记
hive·笔记·sql·学习
郭庆汝37 分钟前
CMake概述用法详细笔记
笔记
武当豆豆38 分钟前
C++编程学习(第25天)
开发语言·c++·学习
张人玉39 分钟前
XML 序列化与操作详解笔记
xml·前端·笔记
风和日丽 随波逐流40 分钟前
java17学习笔记-Deprecate the Applet API for Removal
笔记·学习
淮北也生橘121 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
diablobaal1 小时前
云计算学习100天-第17天
学习
BD_Marathon2 小时前
Kafka文件存储机制
分布式·kafka
果粒橙_LGC2 小时前
论文阅读系列(一)Qwen-Image Technical Report
论文阅读·人工智能·学习
yiqiqukanhaiba4 小时前
STM32学习笔记13-通信协议I2C&MPU6050&I2C软件控制
笔记·stm32·学习