多次调用Kafka Streams StreamBuilder.build()是否可以
Is it OK to call Kafka Streams StreamBuilder.build() multiple times
我们正在使用 micronaut/kafka-streams。使用此框架来创建流应用程序,您可以构建如下内容:
@Factory
public class FooTopologyConfig {
@Singleton
@Named
public KStream<String, FooPojo> configureTopology {
return builder.stream("foo-topic-in")
.peek((k,v) -> System.out.println(String.format("key %s, value: %s", k,v))
.to("foo-topic-out");
}
}
这个:
- 收到一个
ConfiguredStreamBuilder
(StreamsBuilder
周围的一个非常轻的包装器)
- 构建并 return 流(我们实际上不确定 return 流有多重要,
但这是一个不同的问题)。
ConfiguredStreamBuilder::build()
(在 StreamsBuilder
上调用相同的内容)稍后由框架调用,returned Topology
无法通过 Micronaut 注入。
我们需要 Topology
bean 来记录拓扑的描述(通过 Topology::describe
)。
执行以下操作是否安全?
- 调用
ConfiguredStreamBuilder::build
(因此调用 StreamsBuilder::build
)并使用 Topology
的 returned 实例来打印人类可读的描述。
- 允许框架稍后第二次调用
ConfiguredStreamBuilder::build
,并使用 returned 拓扑的 second 实例来构建应用程序。
多次调用build()
应该没有问题。这在 Streams 的内部代码和测试中很常见。
回答你的另一个问题。如果您想稍后在拓扑的那个分支上扩展,您只需要来自 builder.stream()
操作的流。
我们正在使用 micronaut/kafka-streams。使用此框架来创建流应用程序,您可以构建如下内容:
@Factory
public class FooTopologyConfig {
@Singleton
@Named
public KStream<String, FooPojo> configureTopology {
return builder.stream("foo-topic-in")
.peek((k,v) -> System.out.println(String.format("key %s, value: %s", k,v))
.to("foo-topic-out");
}
}
这个:
- 收到一个
ConfiguredStreamBuilder
(StreamsBuilder
周围的一个非常轻的包装器) - 构建并 return 流(我们实际上不确定 return 流有多重要, 但这是一个不同的问题)。
ConfiguredStreamBuilder::build()
(在 StreamsBuilder
上调用相同的内容)稍后由框架调用,returned Topology
无法通过 Micronaut 注入。
我们需要 Topology
bean 来记录拓扑的描述(通过 Topology::describe
)。
执行以下操作是否安全?
- 调用
ConfiguredStreamBuilder::build
(因此调用StreamsBuilder::build
)并使用Topology
的 returned 实例来打印人类可读的描述。 - 允许框架稍后第二次调用
ConfiguredStreamBuilder::build
,并使用 returned 拓扑的 second 实例来构建应用程序。
多次调用build()
应该没有问题。这在 Streams 的内部代码和测试中很常见。
回答你的另一个问题。如果您想稍后在拓扑的那个分支上扩展,您只需要来自 builder.stream()
操作的流。