Hadoop学习笔记(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进行编译

unzip kafka-manager-2.0.0.2.zip -d /usr/local/

修改配置文件,/usr/local/kafka-manager-2.0.0.2/conf/application.conf
修改zookeeper连接地址

kafka-manager.zkhosts="hdp01.hdp.com:2181,hdp02.hdp.com:2181,hdp03.hdp.com:2181"

启动kafka-manager

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账号信息

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账号信息如下

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票证:

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;

要使用keytab:

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
核心配置如下

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

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,并且可以看到相关的详细信息。

ls /controller
get /controller

在这里插入图片描述

ls /brokers/ids
get /brokers/ids/1001

在这里插入图片描述
之后在kafka集群中增加节点hdp04,此时可以看到controller仍是hdp03,但broker下已经有hdp04节点。

ls /controller
get /controller

在这里插入图片描述

ls /brokers/ids
get /brokers/ids/1002

在这里插入图片描述

5.其他配置确认

(1)权限控制

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

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

Ranger控制

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

./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列表

./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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类信息发布小程序效果如何

信息发布系统连接信息供需双方,打造信息聚合平台,用户可获取和发布需求信息、参与互动交流,适用于同城、社区交流、客户互动、业务员/经纪人发布信息场景。 制作分类信息小程序后,商家后台设置信息项,发布者填写内容发…

腾讯云轻量应用服务器挂载对象存储详细说明

腾讯云轻量对象存储LighthouseCOS是腾讯云专为中小企业开发者打造的轻量级数据存储服务,适用于云端网站、小程序、课堂演示、云盘/图床等场景下的数据存储和处理任务。腾讯云百科txybk.com详细介绍腾讯云轻量对象存储使用、开通和收费价格说明: 轻量对象…

配置CentOS服务器以支持PHP

CentOS是一款优秀的开源服务器操作系统,为各种网络服务提供了强大的支持。为了使CentOS服务器能够支持PHP,我们需要进行一些必要的配置。下面将介绍配置CentOS服务器以支持PHP的关键步骤。 安装PHP 首先,需要安装PHP解释器。在CentOS上&…

【python】使用pipenv创建虚拟环境进行打包

文章目录 一、pipenv 介绍二、快速上手使用pipenv2.1 安装pipenv2.2 创建虚拟环境2.3 激活环境2.4 虚拟环境中安装项目依赖包2.5 检查项目在虚拟环境中是否能正常运行2.6 打包项目2.7 删除虚拟环境 起因: 本地安装的模块太多,使用pyinstaller打包,会把许多无关模块打包进去&…

【头歌系统数据库实验】实验5 SQL的多表查询-1

目录 第1关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S、J表) 第2关:查询供应情况,并显示供应商、零件和工程三者的名称 第3关:找出上海厂商供应的所有零件号码 第4关:找出使用上海产的零…

关于inline函数声明和定义为什么不可以分离

个人主页:Lei宝啊 愿所有美好如期而遇 前言 inline函数在使用时声明和定义不可以分离,接下来我们将会解释为什么是这样的。 我们从程序的编译链接说起。 首先我们先介绍一下程序的翻译环境: 编译分以下几个步骤,预处理&#x…

Hadoop学习笔记(HDP)-Part.08 部署Ambari集群

目录 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 …

R语言【rgbif】——最全最详细的函数解读(occ_search)

occ_search最全最详细的参数解读 occ_search有什么作用?occ_search有哪些参数?occ_search的参数使用?aa. 通过名称完成筛选的参数1. taxonKey(用于检索的类群的标识符)2. scientificName(用于检索的类群的科…

U盘文件突然不见了怎么恢复?文件恢复(3个方法)!

“好奇怪呀!一般我都会把比较重要的文件保存在u盘中,但是今天使用u盘的时候却发现u盘里的文件突然不见了,这是为什么呢?我怎么才能恢复这些数据呢?” 在我们的日常生活和工作中,U盘作为一种便携式的存储设备…

ChatGPT哪些行业需要学习?

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

CSS进阶知识点速览2

1 前情回顾 关于选择器进阶、背景色、元素显示模式和css特性的前半部分集中在下面的笔记中: css进阶知识点速览 2 CSS特性 2.1 优先级 特性:不同选择器具有不同的优先级,优先级高的选择器样式会覆盖优先级低选择器样式 优先级公式&#x…

网安专家带你学透网络渗透测试,小白零基础启航

渗透测试简介 渗透测试,作为评估网络安全的一种方法,模拟攻击者对目标系统的攻击,以评估系统的安全性。这种方法不仅揭示了系统的潜在漏洞,而且还帮助我们理解攻击者可能利用这些漏洞的方式。在这个数字化和网络化日益增长的时代…

R语言【rgbif】——最全最详细的函数解读(name_suggest)

name_suggest最全最详细的参数解读 1. name_suggest的基本情况2. name_suggest的参数3. name_suggest的示例与理解3.1 参数 【q】3.2 参数【rank】3.3 参数【limit】3.4 参数【fields】3.5 参数【datasetKey】3.6 参数【curlopts】 1. name_suggest的基本情况 name_suggest是用…

堆能高效解决的经典问题

关卡名 堆能高效解决的经典问题 我会了✔️ 内容 1.掌握数组中寻找第K的元素 ✔️ 2.理解堆排序的原理 ✔️ 3.合并K个排序链表 ✔️ 1 在数组中找第K大的元素 LeetCode215 给定整数数组nums和整数k,请返回数组中第k个最大的元素。 请注意,你需要…

力扣面试经典150题——Unix简化路径

https://leetcode.cn/problems/simplify-path/description/?envTypestudy-plan-v2&envIdtop-interview-150 思路:将串以/分割,判断字符串是…/./其他,进行入栈和出栈,最后留下的就是结果,拼装一下就好了。 三个…

海上液化天然气 LNG 终端 ,数字孪生监控系统

液化天然气 (Liquefied Natural Gas,简称 LNG) 在能源转型过程中被广泛认可为相对较清洁的能源选择。 相对于传统的煤炭和石油燃料,LNG 的燃烧过程产生的二氧化碳 (CO2) 排放较低。LNG 的燃烧释放的二氧化碳排放较少,因此对应对气候变化和减…

【Math】高斯分布的乘积 Product of Gaussian Distribution【附带Python实现】

【Math】高斯分布的乘积 Product of Gaussian Distribution【附带Python实现】 文章目录 【Math】高斯分布的乘积 Product of Gaussian Distribution【附带Python实现】1.推导2. CodeReference 结果先放在前面 1.推导 在学习PEARL算法的时候,encoder的设计涉及到了…

MySQL limit导致索引选择(选择的并不是最佳索引)案例分析

mysql limit导致索引选择(选择的并不是最佳索引)案例分析: 这种情况可能是mysql优化器内部bug造成: bug 触发条件如下: 1.优化器先选择了 where 条件中字段的索引,该索引过滤性较好; 2.SQL 中必须有 orde…

k8s中Service负载均衡和Service类型介绍

目录 一.service介绍 二.service参数详解 三.定义service的两种方式 1.命令行expose 2.yaml文件 四.service负载均衡配置 1.kube-proxy代理模式 (1)设置ipvs (2)负载均衡调度策略 2.会话保持 3.案例演示 五.四种Servi…

[Python]字典的应用:赋值表达式转化为字典

文件中有很多行,每行中一个等号,等号左边是键右边是值,如何把这些键值对获取到 def read_key_value_pairs(file_path):key_value_pairs {}i 0# 注意解码格式与编码格式相统一with open(file_path, r, encodingutf-8) as file:for line in…