自定义Flume的Interceptor,编写、配置与使用

基于需求,自己写了一个Flume的Interceptor,主要需求如下:

kafka中数据格式为json字符串,需要利用Flume消费kafka中的数据,并按照指定的key的顺序,将value输出,并用指定分隔符分隔
输入:String JsonString = "{'key1':'a','key2':'b','key3':'c','key4':'d','key5':'e','key6':'f'}";
指定的key的顺序:String[] keys = {"key1","key2","key3","key4","key5","key6"};
输出:a\u0001b\u0001c\u0001d\u0001e\u0001f

具体实现代码如下:

1、Interceptor代码:
package com.bonc.flumeInterceptor;

import java.util.HashMap;
import java.util.List;

import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;

import com.bonc.utils.Json2Map;
import com.bonc.utils.StringUnicodeUtil;
import com.google.common.base.Charsets;
import com.google.common.collect.Lists;
/**
 * 
 * @author pengzhe
 * 自定义的一个flume拦截器,用来将json字符串转化成map,再按照指定顺序将map中的value按照指定格式输出
 * 例子:
 * 	 String[] keys = {"key1","key2","key3","key4","key5","key6"};
	  输入:String JsonString = "{'key1':'a','key2':'b','key3':'c','key4':'d','key5':'e','key6':'f'}";
	  输出:a\u0001b\u0001c\u0001d\u0001e\u0001f
 *
 */
public class FlumeJsonInterceptor implements Interceptor{

	@Override
	public void close() {	
	}
	@Override
	public void initialize() {
	}
	@Override
	public Event intercept(Event event) {
		//以keys数组中的元素顺序,输出jsonMap中对应key的value的值
		String[] keys = {"key1","key2","key3","key4","key5","key6"};
		String JsonString = new String(event.getBody(),Charsets.UTF_8);
		//将jsonString转化为jsonMap
		HashMap jsonMap = (HashMap) Json2Map.json2Map(JsonString);
		System.out.println(jsonMap);
		//将\u0001转化成字符串,用于拼接
		String separatorStr = StringUnicodeUtil.unicode2Stri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值