我想了解一下Kafka和Spark(流)节点之间的通信是如何发生的。我有以下问题。
我是说,这里的通信是RPC通信还是套接字通信。我想了解一下内部解剖
任何帮助都很感激。
提前谢谢。
发布于 2016-03-16 09:10:50
首先,Kafka节点和Spark节点是否位于同一个集群并不重要,但是它们应该能够相互连接(在防火墙中打开端口)。
使用较早的KafkaUtils.createStream() API和更新的KafkaUtils.createDirectStream()方法,有两种使用Streaming从Kafka读取的方法。
我不想讨论它们之间的差异,这是一个很好的文档化的这里 (简而言之,直接流更好)。
在回答你的问题时,交流是如何发生的(内部解剖):找到答案的最好方法是查看星火源代码。
createStream() API直接从官方的org.apache.kafka包中使用一组org.apache.kafka消费者。这些卡夫卡消费者有自己的客户称为NetworkClient,您可以检查这里。简而言之,NetworkClient使用套接字进行通信。
createDirectStream() API确实使用了来自同一个org.apache.kafka包的SimpleConsumer。SimpleConsumer类使用java.nio.ReadableByteChannel (它是java.nio.SocketChannel的一个子类)从Kafka读取,所以它最终也使用了套接字,但更间接地使用了Java的非阻塞I/O方便API。
因此,要回答您的问题:它是用套接字完成的。
https://stackoverflow.com/questions/36027963
复制相似问题