shp*_*chu 5 apache-kafka apache-kafka-streams
在使用 Kafka Streams DSL 时,有没有办法使用相同的主题作为两个不同处理例程的源?
StreamsBuilder streamsBuilder = new StreamsBuilder();
// use the topic as a stream
streamsBuilder.stream("topic")...
// use the same topic as a source for KTable
streamsBuilder.table("topic")...
return streamsBuilder.build();
Run Code Online (Sandbox Code Playgroud)
上面的幼稚实现TopologyException在运行时抛出一个:无效拓扑:主题主题已经被另一个源注册。如果我们深入研究底层处理器 API,这是完全有效的。使用它是唯一的出路吗?
更新: 迄今为止我发现的最接近的替代方案:
StreamsBuilder streamsBuilder = new StreamsBuilder();
final KStream<Object, Object> stream = streamsBuilder.stream("topic");
// use the topic as a stream
stream...
// create a KTable from the KStream
stream.groupByKey().reduce((oldValue, newValue) -> newValue)...
return streamsBuilder.build();
Run Code Online (Sandbox Code Playgroud)
恕我直言,将同一主题读取为流和表在语义上是有问题的。流模型不可变的事实,而更改日志主题将用于读入 KTable 模型更新。
如果您想在多个流中使用单个主题,您可以KStream多次重用同一个对象(它在语义上类似于广播):
KStream stream = ...
stream.filter();
stream.map();
Run Code Online (Sandbox Code Playgroud)
另请比较: https: //issues.apache.org/jira/browse/KAFKA-6687(有计划取消此限制。我怀疑,我们将允许同时使用一个主题KStream-KTable比较我的评论从上面)。
| 归档时间: |
|
| 查看次数: |
3344 次 |
| 最近记录: |