【发布时间】:2018-11-09 06:03:41
【问题描述】:
正如 spark docs 所说,它支持 kafka 作为数据流源。但是我使用 ZeroMQ,并且没有 ZeroMQUtils。所以我该如何使用它?一般来说,其他MQ怎么样。我对火花和火花流媒体完全陌生,所以如果问题很愚蠢,我很抱歉。谁能给我一个解决方案。谢谢 顺便说一句,我使用 python。
更新,我终于用自定义接收器在 java 中做到了。以下是我的解决方案
public class ZeroMQReceiver extends Receiver<T> {
private static final ObjectMapper mapper = new ObjectMapper();
public ZeroMQReceiver() {
super(StorageLevel.MEMORY_AND_DISK_2());
}
@Override
public void onStart() {
// Start the thread that receives data over a connection
new Thread(this::receive).start();
}
@Override
public void onStop() {
// There is nothing much to do as the thread calling receive()
// is designed to stop by itself if isStopped() returns false
}
/** Create a socket connection and receive data until receiver is stopped */
private void receive() {
String message = null;
try {
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket subscriber = context.socket(ZMQ.SUB);
subscriber.connect("tcp://ip:port");
subscriber.subscribe("".getBytes());
// Until stopped or connection broken continue reading
while (!isStopped() && (message = subscriber.recvStr()) != null) {
List<T> results = mapper.readValue(message,
new TypeReference<List<T>>(){} );
for (T item : results) {
store(item);
}
}
// Restart in an attempt to connect again when server is active again
restart("Trying to connect again");
} catch(Throwable t) {
// restart if there is any other error
restart("Error receiving data", t);
}
}
}
【问题讨论】:
-
结构化流或 DStream?
-
@Bernhard Stadler,两个都可以,就像我说的,我是全新的,有什么解决办法吗?
-
@youngjack 我发布的答案如何(结构化流媒体通常从开发人员 POV 获得更好)? :)
标签: apache-spark zeromq