水槽事件被截​​断

时间:2015-12-10 04:17:04

标签: hdfs apache-kafka interceptor flume sink

这里我遇到一个问题,我从Kafka源接收消息,并编写一个拦截器从kafka消息(json格式)中提取两个字段(dataSoure和businessType)。这里我使用的是gson.fromJson()。但问题是我得到了以下错误。

在这里,我想知道当Flume事件超过极限时Flume会截断它吗?如果是,如何将其设置为更大的值。因为我的kafka消息总是很长,大约60K字节。

期待回复。提前谢谢!

  

2015-12-09 11:48:05,665(PollableSourceRunner-KafkaSource-apply)   [错误 -   org.apache.flume.source.kafka.KafkaSource.process(KafkaSource.java:153)]   KafkaSource EXCEPTION,{} com.google.gson.JsonSyntaxException:   com.google.gson.stream.MalformedJsonException:未终止的字符串at   第1行第4096行           在com.google.gson.Gson.fromJson(Gson.java:809)           在com.google.gson.Gson.fromJson(Gson.java:761)           在com.google.gson.Gson.fromJson(Gson.java:710)           at com.xxx.flume.interceptor.JsonLogTypeInterceptor.intercept(JsonLogTypeInterceptor.java:43)           at com.xxx.flume.interceptor.JsonLogTypeInterceptor.intercept(JsonLogTypeInterceptor.java:61)           at org.apache.flume.interceptor.InterceptorChain.intercept(InterceptorChain.java:62)           在org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:146)           在org.apache.flume.source.kafka.KafkaSource.process(KafkaSource.java:130)

1 个答案:

答案 0 :(得分:0)

最后,我通过调试源代码找到了根本原因。 因为我试图将event.getBody()转换为使用Gson的映射,这是不正确的,因为event.getBody()是一个byte [],而不是一个无法转换的String。正确的代码应如下所示:

String body = new String(event.getBody(), "UTF-8");   
Map<String, Object> map = gson.fromJson(body, new TypeToken<Map<String, Object>>() {}.getType());