目录
一、Flume对接Kafka之后取到的数据有双引号
二、Failed to create topic
三、Failed to construct kafka consumer
四、单一节点创建topic失败
五、Slipstream中建es表报错
一、Flume对接Kafka之后取到的数据有双引号
【问题描述】
如下图所示,虽然Flume、Kafka、Slipstream对接成功并取到了数据,但是Inceptor中查询出的数据均带有双引号。
【问题原因】
可能的原因是Flume默认传输机制是用json字符串传输的数据,所以传输过来的数据均带有双引号。
【解决办法】
Flume在1.7版本之后开始支持拦截器(Interceptor)的功能,可以在Flume的配置文件(这是编辑的配置文件为flume-topic-oracle.conf)中配置拦截器以达到过滤双引号的目的。配置方式如下:
参数解释:
(1)a1.sources.r1.interceptors:定义拦截器的名字;
(2)a1.sources.r1.interceptors.i1.type:定义拦截器的类型(此处是寻找并替换);
(3)a1.sources.r1.interceptors.i1.searchPattern:定义寻找的字符;
(4)a1.sources.r1.interceptors.i1.replaceString:定义替换的字符。
配置完成之后,重启Flume组件,在Oracle数据库中插入几条数据进行测试,Inceptor中得到的结果显示正常。
二、Failed to create topic
【问题描述】
在创建Kafka topic的时候显示创建topic失败,具体错误如下:
【问题原因】
(1)./kafka-topics.sh --create --topic qwe --zookeeper node1:2181,node2:2181,node3:2181 --partition 3 --replication-factor 3
(2)./kafka-broker-topics.sh --bootstrap-server node3:9092,node2:9092,node1:9092 --create --topic test3 --partitions 3 --replication-factor 3 --consumer.config ../config/consumer.properties
(1)中创建topic的方式是通过zookeeper校验获取controller信息之后创建topic的;(2)中创建topic的方式是没有通过zookeeper校验,所以无法获取到controller的信息,此时,kafka会认为连接server最快的那个节点是controller,一旦与zookeeper中选举的controller不同时,就会报如上的错误。
【解决办法】
1、建议使用(1)中的方法创建topic。
2、如果需要使用(2)中的方法进行topic的创建,可以先去zookeeper中查看controller位于哪一节点,然后再执行创建topic的语句。具体操作如下:
首先去到kafka的bin目录下,启动zookeeper客户端:
然后执行获取controller的命令:
得到brokerid之后,执行如下命令:
由上图可以看出,此时的controller位于node3上,故使用如下命令创建topic:
./kafka-broker-topics.sh --bootstrap-server node3:9092 --create --topic test3 --partitions 3 --replication-factor 3 --consumer.config ../config/consumer.properties
三、Failed to construct kafka consumer
【问题描述】
在交互界面创建完流与表之后,在触发流的过程中遇到如下错误:
【问题可能的原因】
1、当前用户没有操作集群的权限;2、没有给当前topic赋生产数据、消费数据的权限;3、创建流时的principal参数写错。
【解决办法】
在Kafka的bin目录下执行如下命令进行赋权(以topic indexs为例)。
--给当前用户赋操作集群的权限
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --add --allow-principal User:hive –cluster
--给当前topic赋生产数据的权限
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --add --allow-principal User:hive --topic indexs –producer
--给当前topic赋消费数据的权限
./kafka-acls.sh --authorizer-properties zookeeper.connect=node3:2181,node2:2181,node1:2181 --add --allow-principal User:hive --topic indexs --consumer --group hadoop
赋权之后,登录8380界面:“权限”-->KAFKA-->kafka1。
将“话题权限”、“消费组权限”和“集群权限”的“GLOBAL”一栏,增加“hive”用户。
去到/etc/slipstream1/conf目录下找到之前分发的kafka.keytab文件,执行如下命令:
klist -ket kafka.keytab
查看principal参数的设置如下:
核对建流语句中的principal参数,无误后重新建流触发,此时触发成功。
四、单一节点创建topic失败
【问题描述】
使用一个节点创建topic的时候创建失败,报错如下:
【问题原因】
Zookeeper的机制会选举出一个节点作为Leader,其余节点作为Follower,此处创建topic失败说明node1不是Leader,即不是Controller。
【解决办法】
将所有节点都写上。例如:
./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
五、Slipstream中建es表报错
【问题描述】
在Slipstream中建立es表时,报错如下:
【问题原因】
没设置Slipstream依赖Search。
【解决办法】
去8180监控界面Slipstream组件下,设置Slipstream依赖Search。