[英]Spark Streaming Unit Test in Java
我正在嘗試為我的Spark流作業編寫單元測試。 我的Spark流作業使用來自MQ
消息並將其推送到kafka
主題。
我的方法是
下面是我的代碼,它不起作用。 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.