1. Kafka使用前的配置
集群在不开启安全的情况下,可以直接进行创建topic的操作。如果集群开启了安全,需要进行相关的安全认证的参数配置。首先去到Kafka的config目录下。
1.1 修改producer.properties文件。
1.2 修改server.properties文件。
1.3 修改consumer.properties文件。
1.4 jaas.conf文件的介绍。
jaas.conf文件使用在两处:一,使用Kafka命令前需要声明KAFKA_OPTS变量;二,Flume对接Kafka时,jaas.conf文件内容为KafkaServer、KafkaClient、ZookeeperClient的认证信息。
jaas.conf文件是默认创建的,文件路径为:/etc/kafka1/conf/。开启安全后,执行kafka的命令前必须保证变量KAFKA_OPTS的值为"-Djava.security.auth.login.config=/etc/kafka1/conf/jaas.conf",为了避免麻烦直接在系统变量里面声明KAFKA_OPTS变量。
2. Kafka建立topic
2.1 用户赋权
使用如下命令查看当前用户是什么用户:
klist
结果如下:
首先去到Kafka的bin目录下,然后给当前用户赋操作集群的权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --add --allow-principal User:hive --cluster
2.2 创建topic并赋权
使用如下命令创建一个3分区3副本的topic:
./kafka-broker-topics.sh --bootstrap-server node3:9092,node2:9092,node1:9092 --create --topic yxy --partitions 3 --replication-factor 3 --consumer.config ../config/consumer.properties
出现“Successfully created topic…”表示创建topic成功:
使用如下命令列出集群中存在topic:
./kafka-topics.sh --zookeeper node3:2181,node2:2181,node1:2181 --list
如下图所示:
使用如下命令给topic yxy赋予生产数据的权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --add --allow-principal User:hive --topic yxy --producer
使用如下命令给topic yxy赋予消费数据的权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --add --allow-principal User:hive --topic yxy --consumer --group hadoop
使用如下命令查看topic yxy具有哪些权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --list --topic yxy
如下图所示:
2.3 测试Kafka
创建Kafka topic之后,开启两个窗口进行Kafka的测试,在Kafka的bin目录下,执行如下命令开启生产者:
./kafka-console-producer.sh --broker-list node3:9092,node2:9092,node1:9092 \
--topic yxy \
--producer.config ../config/producer.properties
执行如下命令开启消费者:
./kafka-console-consumer.sh --bootstrap-server node3:9092,node2:9092,node1:9092 \
--topic yxy \
--consumer.config ../config/consumer.properties
如下图所示:
在生产者窗口输入内容,正常情况下可以在消费者窗口接收到输入的数据:
至此,Kafka创建topic成功。
3. Kafka删除topic
删除topic之前需要先去8180监控界面将delete.topic.enable的参数设置为true,如下图所示:
然后,点击右上角“更多操作”-->“配置服务”后,重启Kafka组件:
重启完成后,可以进行Kafka topic的删除操作,这里提供两种方法。
3.1 使用kubectl命令删除topic
首先使用如下命令查看Zookeeper的pod id:
kubectl get pod |grep zookeeper
因为集群三个节点均安装了zookeeper server,故此处可任选上图中的pod id号其一执行如下命令:
kubectl exec -it pod_id bash
例如:执行kubectl exec -it zookeeper-server-zookeeper1-3543915313-0pr6d bash。然后进入Zookeeper的bin目录下执行如下命令:
./zkCli.sh
将/brokers/topics 、/consumers/、/admin/delete_topics/、/config/topics/四个目录下的相关topic删除(这里以topic xyx为例),具体如下图所示:
类似的,将其余三个目录下有关topic xyx的内容全部删除。删除之后,依次执行quit命令和exit命令退出。
在8180监控界面搜索kmq.log.dirs配置项查看相应的配置目录:
此处三个节点的配置目录均为/hadoop/kmq,三个节点均去到此目录下,将相关的topic的内容删除,如下图所示:
至此,Kafka已经将topic xyx删除。
3.2 执行Kafka中Zookeeper的脚本进行删除
在Kafka的bin目录下,执行如下命令,进入到Zookeeper交互界面:
./zookeeper-shell.sh node3:2181,node2:2181,node1:2181
删除操作跟2.1中的相同,在此不再赘述。