Flume的坑
flume HTTP Source 的 JSON 数据:
必须是 Array 形式(用方括号括起来),即使 Array 里只有 1 个元素(每个元素到了 Flume 那儿就代表一个 Event),在 Python 里就要用 dict 外面嵌套 list 或者 tuple 生成 JSON Array;
JSON Array 里每个元素必须由 headers 和 body 两个 field 构成;
JSON Array 中元素的 headers 的值是 JSON Object(具体可以自定义),body 的值必须是字串(JSON String),而不能是其他形式(JSON Object/JSON Array等,对应 Python 中的 dict/list/tuple 等)。
flume异常中断,导致hdfs文件未能关闭
hadoop fsck / -openforwrite
使用以上命令查看文件夹的健康状态,如果有未能关闭的文件,删除它(目前只有这个办法)
flume小文件特别多
调整文件滚动时间或者大小
LEADER_NOT_AVAILABLE` Error
Kafka Sink
,顾名思义,即把 Kafka
(集群或单个服务器)当做 Flume
的数据接收端(消费者),其中有一个配置项是配置 Kafka
的服务器:
AGENT_NAME.sinks.malwrK.kafka.bootstrap.servers = serv1:PORT[,serv2:PORT,serv3:PORT...]
这项配置中,如果只指定单个的 Kafka
服务器地址,Flume Agent
会正常运行,但如果把 Kafka
集群里的多个服务器地址都写上,并且Kafka
的默认配置不修改,则会报以下错误:
WARN Error while fetching metadata with correlation id 39 : {4-3-16-topic1=LEADER_NOT_AVAILABLE}
并且数据无法正常发送到 Kafka
集群。该错误的意思是集群中的服务器,没有一个可用的 LEADER,导致数据无法正常 Fetch。那么解决方法也很简单,在 Kafka
集群的每个服务器 server.properties
配置文件中,开启(取消注释)以下配置,并把配置项的值改成统一指定的一台 Kafka
服务器做 LEADER:
advertised.listeners=PLAINTEXT://your.host.name:9092
网友评论