我一直在向Kafka主题发送消息,这些消息在主题中是JSON,我使用KafkaSpout
从Kafka获取消息并使用shuffle分组将其发送到bolt。现在我想实现KafkaSpout
和bolt之间的字段分组。请有人帮我这个。如何在KafkaSpout
和螺栓之间实现字段分组。
答案 0 :(得分:2)
您需要实现backtype.storm.spout.scheme
接口,基本上它看起来像这样:
public class FooScheme implements Scheme {
public Values deserialize(final byte[] _line) {
try{
Values values = new Values();
JSONObject msg = (JSONObject) JSONValue.parseWithException(new String(_line));
values.add((String) msg.get("a"));
values.add((String) msg.get("b"))
values.add(msg)
}
catch(ParseException e) {
//handle the exception
return null;
}
}
public Fields getOutputFields() {
return new Fields("a", "b", "json");}
}
并将它与你的鲸鱼喷水一起使用:
SpoutConfig spoutConfig = new SpoutConfig( ... your config here ...);
spoutConfig.scheme = new SchemeAsMultiScheme(new FooScheme());
KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);
topology.setSpout("kafka-spout", 1).setNumTasks(1);
现在您已准备好使用“a”或“b”或两者分组的字段。
FooBolt bolt = new FooBolt();
topology.setBolt("foo-bolt", new FooBolt(), 1).setNumtasks(1)
.fieldsGrouping("kafka-spout", new Fields("a","b"));
<强>享受强>