kafka自定义消息

Small雀 发布于 2016/06/07 16:55
阅读 328
收藏 0

@卢禹 你好,想跟你请教个问题:这是我的代码,我想自定义消息并用producer发送到服务器上。然后不知道为什么不能通过。kafka版本是kafka_2.10-0.8.1.1。

自定义消息类代码:

producer代码:

报错信息:

加载中
0
卢禹
卢禹

props.put("serializer.class","kafka.serializer.StringEncoder");

serializer.class要用kafka包中的,不是你自己写的,不知道你是一定要自己实现序列化的类还是只是要发数据,只是发数据的化用kafka.serializer.StringEncoder吧


Small雀
Small雀
回复 @卢禹 : 如果把消息定义成json格式,请问下具体怎么发送json格式的消息
卢禹
卢禹
回复 @卢禹 : 他的文章是13年的 那时候是kafka 0.7 现在的api已经变了.所以那个例子应该是不太行了,如果一定要那么实现建议你找找官方文档或者最近的例子
卢禹
卢禹
回复 @Small雀 : 应该是kafka的版本的问题,kafka每个版本变化较大,我一般不这么实现自定义消息。个人建议用json格式,不需要自己实现serializer。你说的那个文章我大概看了下他用“-”分隔的数据,个人觉得不是特别合适,另外如果一定要实现,也不一定要在那层实现,可以在之前就把对象变成字符串来发送。如果不是极端考虑效率问题的化
Small雀
Small雀
例子中可以使用ProducerData这个类型,而我不知道为什么无法使用这个类型,所以就用了KeyedMessage代替。
Small雀
Small雀
StringEncoder只能实现发送String型的数据,我想发送我自定义的数据,例子地址是http://my.oschina.net/ielts0909/blog/100645?fromerr=6xU38Goj
0
卢禹
卢禹

引用来自“卢禹”的评论

props.put("serializer.class","kafka.serializer.StringEncoder");

serializer.class要用kafka包中的,不是你自己写的,不知道你是一定要自己实现序列化的类还是只是要发数据,只是发数据的化用kafka.serializer.StringEncoder吧


回复 @Small雀
大概是这样,我没测你自己调试下
Map<String, String> map = new HashMap<String, String>();
map.put("name", "vvv");
map.put("id", "1");
JSONObject json = JSONObject.fromObject(map);
KeyedMessage<String, String> data = new KeyedMessage<String, String>(topic, json.toString());
producer.send(data);

另外,java的json库有很多 有些可以直接把bean转json非常方便比如fastjson,gson等你可以自己看看
Small雀
Small雀
谢谢,我再继续尝试
返回顶部
顶部