Testing 用嵌入式卡夫卡测试Flink
我有一个简单的Flink应用程序,它总结了在最后一分钟内具有相同id和时间戳的事件:Testing 用嵌入式卡夫卡测试Flink,testing,apache-kafka,integration-testing,apache-flink,flink-streaming,Testing,Apache Kafka,Integration Testing,Apache Flink,Flink Streaming,我有一个简单的Flink应用程序,它总结了在最后一分钟内具有相同id和时间戳的事件: DataStream<String> input = env .addSource(consumerProps) .uid("app"); DataStream<Event> events = input.map(record -> mapper.readValue(record, Event.class)); p
DataStream<String> input = env
.addSource(consumerProps)
.uid("app");
DataStream<Event> events = input.map(record -> mapper.readValue(record, Event.class));
pixels
.assignTimestampsAndWatermarks(new TimestampsAndWatermarks())
.keyBy("id")
.timeWindow(Time.minutes(1))
.sum("constant")
.addSink(simpleNotificationServiceSink);
env.execute(jobName);
private static class TimestampsAndWatermarks extends BoundedOutOfOrdernessTimestampExtractor<Pixel> {
public TimestampsAndWatermarks() {
super(Time.seconds(90));
}
// timestampReadable is timestamp rounded on minutes, in format yyyyMMddhhmm
@Override
public long extractTimestamp(Pixel pixel) {
return Long.parseLong(pixel.timestampReadable);
}
}
DataStream输入=env
.addSource(用户操作)
.uid(“app”);
datastreamevents=input.map(record->mapper.readValue(record,Event.class));
像素
.assignTimestampsAndWatermarks(新的TimestampsAndWatermarks())
.keyBy(“id”)
.时间窗口(时间.分钟(1))
.总和(“常数”)
.addSink(simpleNotificationServiceSink);
环境执行(作业名称);
私有静态类TimestampsAndWatermarks扩展了BoundedAutofordernessTimestampExtractor{
公共水印(){
超级(时间秒(90));
}
//timestampReadable是按分钟取整的时间戳,格式为yyyyMMddhhmm
@凌驾
公共长提取时间戳(像素){
返回Long.parseLong(pixel.timestampReadable);
}
}
我想实现以下场景:
谢谢。有一条JUnit规则可以用来创建嵌入式卡夫卡——请参阅(请参阅) 要使测试干净地终止,请尝试以下操作:
公共类TestDeserializer扩展了KafkadeSerializer{
公共最终静态字符串END\u APP\u MARKER=“END\u APP\u MARKER”//测试作为最后一条记录发送
@凌驾
公共布尔值isEndOfStream(ParseResult nextElement){
if(nextElement.getParseError()==null)
返回false;
if(END_APP_MARKER.equals(nextElement.getParseError().getRawData()))
返回true;
返回false;
}
}
我推荐(测试容器)[因为这也可以用于其他资源。我通常将其与创建主题和添加/读取数据相结合。有人能给我举一个例子,说明在测试中使用testcontainers依赖卡夫卡吗?@salvalcantara如果你搜索Flink源代码,你会发现testcontainers已经在那里使用了一点。https://github.com/search?q=testcontainers+flink+kafka&type=code
有很多成功的例子,你可能会在里面找到一些有用的东西。谢谢David,这些都是很好的例子!