アレックスP.:
私はカフカのイベントをグループ化しています:
private static void createImportStream(final StreamsBuilder builder, final Collection<String> topics) {
final KStream<byte[], GraphEvent> stream = builder.stream(topics, Consumed.with(Serdes.ByteArray(), new UserEventThriftSerde()));
stream.filter((key, request) -> {
return Objects.nonNull(request);
}).groupBy(
(key, value) -> Integer.valueOf(value.getSourceType()),
Grouped.with(Serdes.Integer(), new UserEventThriftSerde()))
.aggregate(ArrayList::new, (key, value, aggregatedValue) -> {
aggregatedValue.add(value);
return aggregatedValue;
},
Materialized.with(Serdes.Integer(), new ArrayListSerde<UserEvent>(new UserEventThriftSerde()))
).toStream();
}
どのように私は追加することができますwindow
が、イベントの数に基づいて時間に基づいていますが、ありません。その理由は、イベントがバルク・ダンプとなり、時間がすべてのイベントが同じ数秒で表示される可能性があるため、凝集が収まらないウィンドウ表示ということです。
マティアス・J.サックス:
これらは、非決定論的であり、それはアウトオブオーダーのデータを処理するのは難しいので、カフカストリームは、アウト・オブ・ボックスのカウントベースのウィンドウをサポートしていません。
代わりに、DSLを使用して、あなたはしかし、あなたのユースケース用のカスタム演算子を構築するためにプロセッサのAPIを使用することができます。