数据流的发送和接收问题

来源:3-2 -初识Storm核心概念

zctzl

2018-04-03

有2个spout:A、B,都将数据流发送给bolt c,其类型分别为String[] a1、double b1、long c1和String[] a2、double b2、double c2。然后c要将这2个流都发给bolt d,并将其中的一个发给bolt e。

问题:

1.对于每一条数据,是直接发送emit(new Values(a, b, c))好,还是将这3个生成一个自定义类型MyObj后发送myobj好?

2.C接收A、B的tuple用什么方法,getValue还是getValueByField?在c接收的时候需要使用tuple.getSourceComponent()来判断数据的来源吗?

3.一个bolt里可以emit()http://img.mukewang.com/szimg/5ac2ee110001301c10820628.jpg2种不同类型的数据吗?(如:emit(new Values(a1, b1, c1))和emit(new Values(a2, b2, c2)同时存在  其中c1为long型  c2为double型)) C里面的declareOutputFields()方法内只能declare一种数据发射格式吗?由于declare要和上面emit内的数据一一对应,但是上面有2中数据要用2中不同的emit发送,那declare该怎么写?


写回答

1回答

Michael_PK

2018-04-07

真不好意思,这个问题当时看到,结果忘记回答了,今天在梳理问题的时候才看到这个问题没回答,这个问题很好。

问题1:这个具体传什么,怎么传,其实是个人爱好问题。个人比较喜欢用emit(new Values(a, b, c));

问题2:由于你两个spout进来的数据类型可能不同,所以建议你,在bolt中先做个数据类型转换,比如将对应的long和double都转成他们都兼容的类型,比如double,然后再进行后续的处理,这样就数据类型都一致了;这个如果已经兼容了而且是同一个后续的处理其实并不需要component来接收,如果是不同的业务,那么就建议采用不同的topo来处理;

问题3:这个如同第二个一样,数据兼容下;如果不同业务处理,就采用不同topo来处理;


有什么问题可以在qq群里,这样可能速度更快。


0
1
zctzl
非常感谢!
2018-04-12
共1条回复

Java大数据实战,巧用Storm快速切入实时流处理领域

深入Storm内部机制,logstash+kafka,快速切入大数据实时流处理

518 学习 · 143 问题

查看课程