簡體   English   中英

Java Spark Streaming單元測試

[英]Spark Streaming Unit Test in Java

我正在嘗試為我的Spark流作業編寫單元測試。 我的Spark流作業使用來自MQ消息並將其推送到kafka主題。

我的方法是

  • 發送測試消息到MQ
  • 在單獨的線程中啟動流作業。 (流作業會將消息推送到kafka主題“ topic1 ”)
  • 卡夫卡消費者繼續對該話題進行投票1
  • 收到消息后,停止線程並退出循環。

下面是我的代碼,它不起作用。 Spark流作業開始正常,但是一旦流作業啟動,我的while循環就停止循環。 由於我是Concurrency主題的新手,因此不確定原因

public class StreamingJobTest {

private static KafkaConsumer<String, String> consumer;

@BeforeClass
public static void setUpClass()  {

    Properties properties = new Properties();

    properties.put("bootstrap.servers", "localhost:9090");
    properties.put("subscribe", "topic1");
    properties.put("startingOffsets", "earliest");
    properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

    consumer = new KafkaConsumer<String, String>(properties);



}


@Test
public void create_test() {
    String[] arguments = new String[]{};
    ConsumerRecords<String, String> records;

    Thread thread = new Thread(() -> StreamingJob.main(arguments));
    thread.start();

     //send a message to MQ.

    MqSender mqSender = new MqSender();
    mqSender.mqPushMsg("TestMsg");

    //keep polling the kafka topic.

    while(true){
        System.out.println("Polling...");
        records = consumer.poll(100);

        if(!records.isEmpty()){

            thread.interrupt();
            break;
        }

    assertNotNull(records);

    }


}

}

為什么流作業開始后我的循環停止工作? 根據我的理解,流將在單獨的線程中運行,對嗎?

我想通了自己。 我需要在單獨的行中訂閱主題。 我將其添加到我的屬性中。 而且在kafka中groupid是強制性的,我錯過了。 現在對我來說很好。 以下是訂閱該主題的代碼。

consumer.subscribe(Arrays.asList("topic1")); 

暫無
暫無

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

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