簡體   English   中英

Apache Spark - 來自Kafka的消息的並行處理 - Java

[英]Apache Spark - Parallel Processing of messages from Kafka - Java

JavaPairReceiverInputDStream<String, byte[]> messages = KafkaUtils.createStream(...);
JavaPairDStream<String, byte[]> filteredMessages = filterValidMessages(messages);

JavaDStream<String> useCase1 = calculateUseCase1(filteredMessages);
JavaDStream<String> useCase2 = calculateUseCase2(filteredMessages);
JavaDStream<String> useCase3 = calculateUseCase3(filteredMessages);
JavaDStream<String> useCase4 = calculateUseCase4(filteredMessages);

...

我從Kafka檢索消息,對其進行過濾並對多個用例使用相同的消息。 這里useCase1到4是相互獨立的,可以並行計算。 但是,當我查看日志時,我發現計算是按順序進行的。 我怎樣才能使它們並行運行。 任何建議都會有所幫助。

嘗試為您的4個用例創建Kafka主題。 然后嘗試創建4種不同的Kafka DStream。

我將所有代碼移動到for循環中,並按照kafka主題中的分區數進行迭代,我看到了改進。

for(i=0;i<numOfPartitions;i++)
{
JavaPairReceiverInputDStream<String, byte[]> messages =
KafkaUtils.createStream(...);
JavaPairDStream<String, byte[]> filteredMessages =
filterValidMessages(messages);

JavaDStream<String> useCase1 = calculateUseCase1(filteredMessages);
JavaDStream<String> useCase2 = calculateUseCase2(filteredMessages);
JavaDStream<String> useCase3 = calculateUseCase3(filteredMessages);
JavaDStream<String> useCase4 = calculateUseCase4(filteredMessages);
}

參考: http//www.michael-noll.com/blog/2014/10/01/kafka-spark-streaming-integration-example-tutorial/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM