Apache spark 火花流:火花和卡夫卡的沟通是如何发生的?
我想了解卡夫卡和Spark(流媒体)节点之间的通信是如何发生的。我有以下问题Apache spark 火花流:火花和卡夫卡的沟通是如何发生的?,apache-spark,apache-kafka,spark-streaming,Apache Spark,Apache Kafka,Spark Streaming,我想了解卡夫卡和Spark(流媒体)节点之间的通信是如何发生的。我有以下问题 如果Kafka服务器和Spark节点位于两个单独的集群中,那么通信将如何进行。配置它们需要哪些步骤 如果两者都在相同的集群中,但在不同的节点中,通信将如何进行 我的意思是这里的通信是RPC通信还是套接字通信。我想了解一下内部解剖 谢谢你的帮助 提前感谢。首先,Kafka节点和Spark节点是否在同一集群中并不重要,但它们应该能够相互连接(在防火墙中打开端口) 使用Spark Streaming有两种读取Kafka的方法
提前感谢。首先,Kafka节点和Spark节点是否在同一集群中并不重要,但它们应该能够相互连接(在防火墙中打开端口) 使用Spark Streaming有两种读取Kafka的方法,使用较旧的
KafkaUtils.createStream()
API和较新的KafkaUtils.createDirectStream()
方法
我不想讨论它们之间的差异,这是有很好的文档记录的(简而言之,直接流更好)
解决您的问题,沟通是如何发生的(内部解剖):最好的方法是查看Spark源代码
createStream()
API直接从官方的org.apache.Kafka
包使用一组Kafka消费者。这些卡夫卡消费者有自己的客户机,名为NetworkClient
,您可以查看。简而言之,NetworkClient
使用套接字进行通信
createDirectStream()
API确实使用了同一org.apache.Kafka
包中的KafkaSimpleConsumer
。SimpleConsumer
类使用java.nio.ReadableByteChannel
读取Kafka,后者是java.nio.SocketChannel
的一个子类,因此最终也可以使用套接字完成,但更间接地使用java的非阻塞I/O便利API
因此,为了回答您的问题:这是通过套接字完成的。是否可以在Spark流中使用节点之间的同步通信,例如Http请求/响应?