我正在开发java kafka-stream应用程序。我使用mvn clean package
命令来构建最终的jar文件。但是构建过程永远停留在某个状态
2019-07-09 13:58:18.991信息12689 --- [-StreamThread-1] org.apache.kafka.streams.KafkaStreams:流客户端 [wordcount-live-test-51e167c1-08d3-4b23-b5aa-97f9e40bc5e7]状态 从重新平衡过渡到运行
如何将最终输出保存为jar
Properties streamsConfiguration = new Properties();
streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-live-test");
streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-2.c.charming-opus-833.internal:9092,kafka-0.c.charming-opus-833.internal:9092,kafka-1.c.charming-opus-833.internal:9092");
// streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
streamsConfiguration.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
streamsConfiguration.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, SpecificAvroSerde.class);
streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);
streamsConfiguration.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
streamsConfiguration.put("schema.registry.url", "http://35.184.181.97:8089/");
final Map<String, String> serdeConfig = Collections.singletonMap("schema.registry.url", "http://35.184.181.97:8089/");
final Serde<String> stringSerde = new Serdes.StringSerde();
final Serde<GenericRecord> valueGenericAvroSerde = new GenericAvroSerde();
valueGenericAvroSerde.configure(serdeConfig, false);
final StreamsBuilder builder = new StreamsBuilder();
final KStream<String, GenericRecord> stream = builder.stream("testtrip", Consumed.with(stringSerde, valueGenericAvroSerde));
KStream<String, GenericRecord> tripStream[] = stream.branch(
(k, v) -> (v.getSchema().getName().equals("TripCreated")),
(k, v) -> (v.getSchema().getName().equals("TripCompleted"))
);
KStream<String, TripCompleted> tripCompletedKStream = tripStream[1].mapValues(
(v) -> {
System.out.println("message received to trip Completed stream");
ObjectMapper objectMapper = new ObjectMapper();
try {
TripCompleted tc = objectMapper.readValue(v.toString(), TripCompleted.class);
return tc;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
);
KStream<String, TripCreated> tripCreatedKStream = tripStream[0].mapValues(
(v) -> {
System.out.println("message received to trip Created stream");
ObjectMapper objectMapper = new ObjectMapper();
try {
TripCreated tc = objectMapper.readValue(v.toString(), TripCreated.class);
return tc;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
);
KTable<String, TripCompleted> tripCompletedTable = tripCompletedKStream.groupByKey().reduce(
(k, v) -> {
System.out.println("trip completed message received");
return v;
}
);
KTable<String, TripCreated> tripCreatedTable = tripCreatedKStream.groupByKey().reduce(
(k, v) -> {
System.out.println("trip created message received");
return v;
}
);
KTable<String, Materialized> joinedTable = tripCreatedTable.leftJoin(tripCompletedTable, (tcre, tcom) -> {
long millis = System.currentTimeMillis();
UUID uuid = UUID.randomUUID();
System.out.println(tcre.toString());
System.out.println(tcom == null ? "" : tcom.toString());
Body body = Body.newBuilder()
.setBookedBy(tcre.getBody().getBookedBy())
.setDriverId(tcom == null ? 0 : tcom.getBody().getDriverId())
.setPassengerId(tcom == null ? 0 : tcom.getBody().getPassengerId())
.setModule(tcre.getBody().getModule())
.setTripId(tcre.getBody().getTripId())
.setVehicleType(tcre.getBody().getVehicleType())
.build();
Materialized m = Materialized.newBuilder()
.setCreatedAt(millis)
.setExpiry(1234)
.setId(uuid.toString())
.setType("java_materialized_test")
.setVersion(1)
.setBody(body)
.setTraceInfo(setTraceInfo())
.build();
return m;
});
// joinedTable.foreach((k, v) -> System.out.println("value:" + v.toString()));
joinedTable.to("test_materialized");
final Topology topology = builder.build();
System.out.println("Topology:" + topology.describe());
final KafkaStreams streams = new KafkaStreams(topology, streamsConfiguration);
final CountDownLatch latch = new CountDownLatch(1);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
streams.close();
latch.countDown();
}
});
try {
streams.start();
latch.await();
} catch (final Throwable e) {
System.exit(1);
}
System.exit(0);
}
private TraceInfo setTraceInfo() {
TraceId traceId = TraceId.newBuilder()
.setHigh(123456)
.setLow(654321)
.build();
TraceInfo traceInfo = TraceInfo.newBuilder()
.setTraceId(traceId)
.setParentId(123456)
.setSampled(true)
.setSpanId(123456)
.build();
return traceInfo;
}
答案 0 :(得分:0)
但是,在评论了用于正常关闭应用程序的以下内容之后
final CountDownLatch latch = new CountDownLatch(1);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
streams.close();
latch.countDown();
}
});
try {
streams.start();
latch.await();
} catch (final Throwable e) {
System.exit(1);
}
System.exit(0);
mvn clean程序包成功构建了jar