Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡流应用程序将读写分开_Java_Stream_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java 卡夫卡流应用程序将读写分开

Java 卡夫卡流应用程序将读写分开,java,stream,apache-kafka,apache-kafka-streams,Java,Stream,Apache Kafka,Apache Kafka Streams,我对卡夫卡和卡夫卡溪流很陌生,所以请容忍我。我想知道我在这方面是否走对了 我现在正在写卡夫卡主题,并试图通过rest服务访问数据。原始数据类型在被访问之前需要进行转换 到目前为止,我拥有的是一个将原始数据写入主题的制作人 1。)现在我想要一个streams应用程序(应该是一个在容器中运行的jar),它可以将数据转换成我想要的形状。这里遵循物化视图范式 1的过度简化版本。) 现在这是伪代码 我走的路对吗?将1.)和2.)分开是否有意义?这是使用流实现视图的缩进方式吗?对我来说,在我看到更多流量的地

我对卡夫卡和卡夫卡溪流很陌生,所以请容忍我。我想知道我在这方面是否走对了

我现在正在写卡夫卡主题,并试图通过rest服务访问数据。原始数据类型在被访问之前需要进行转换

到目前为止,我拥有的是一个将原始数据写入主题的制作人

1。)现在我想要一个streams应用程序(应该是一个在容器中运行的jar),它可以将数据转换成我想要的形状。这里遵循物化视图范式

1的过度简化版本。)

现在这是伪代码

我走的路对吗?将1.)和2.)分开是否有意义?这是使用流实现视图的缩进方式吗?对我来说,在我看到更多流量的地方,通过容器独立地扩展写操作和读操作会有好处

在发生1.)或2.)的崩溃时,如何处理KTable的重新填充。这是通过复制到流式api来完成的,还是我需要通过代码来解决的。如重置光标并回复事件?

两条注释:

在代码片段(1)中,在将构建器交给
KafkaStreams
构造函数后修改拓扑:

KafkaStreams streams = new KafkaStreams(builder,props);
// don't modify builder anymore!
您不应该这样做,而是首先指定拓扑,然后创建
KafkaStreams
实例

关于将应用程序一分为二。独立缩放这两个部分是有意义的。但总的来说很难说。但是,如果您同时使用这两种方法,第一种方法需要将转换后的日期写入输出主题,第二种方法应该将此输出主题作为表(
builder.table(“转换的输出主题”)
读取,以满足其余请求

要访问KTable的存储,需要通过提供的存储名称获取查询句柄:

ReadOnlyKeyValueStore keyValueStore =
streams.store("My-Table", QueryableStoreTypes.keyValueStore());
有关更多详细信息,请参阅文档:

有几点意见:

在代码片段(1)中,在将构建器交给
KafkaStreams
构造函数后修改拓扑:

KafkaStreams streams = new KafkaStreams(builder,props);
// don't modify builder anymore!
您不应该这样做,而是首先指定拓扑,然后创建
KafkaStreams
实例

关于将应用程序一分为二。这对于独立地扩展这两个部分是有意义的。但一般来说很难说。但是,如果您同时使用这两个部分,第一个部分需要将转换后的日期写入输出主题,第二个部分应该将此输出主题作为一个表(
builder.table(“转换的输出主题”)
为REST请求提供服务

要访问KTable的存储,需要通过提供的存储名称获取查询句柄:

ReadOnlyKeyValueStore keyValueStore =
streams.store("My-Table", QueryableStoreTypes.keyValueStore());
有关更多详细信息,请参阅文档:


Thx的回复。StateStore和KTable之间有区别吗?因为我现在正在向一个表写入,而“rest服务”没有通过您的第三个代码段找到KTable。我正在使用streams.store(“表名”)访问它它必须是StateStore吗?在这种情况下也是一样。当你得到一个KTable时,你没有命名KTable,但是它是一个内部存储。(注意,count方法上的参数名是
storeName
)。所以不确定为什么找不到该存储。可能是RestService实现中的一个bug。thx,可能是我得到的情况“org.apache.kafka.streams.errors.InvalidStateStoreException:状态存储countByApi可能已迁移到另一个实例。“在docker上的单个实例中,env-并且该表通过命令行作为主题可见。为上述异常添加了另一个问题,因为它是自己的主题。答复的X。StateStore和KTable之间是否存在差异。因为我现在正在向表和“rest服务”写入内容”没有通过您的第三个代码段找到KTable。我正在使用streams.store(“表名”)访问它。它必须是StateStore吗?在这种情况下,它是相同的。当您获得KTable时,您不命名KTable,而是命名为内部存储。(注意,count方法上的参数名是
storeName
)。因此不确定为什么找不到该存储。可能是RestService implementation.thx中存在错误,可能是我得到“org.apache.kafka.streams.errors.InvalidStateStoreException:状态存储countByApi可能已迁移到另一个实例。”在docker上的单个实例env中,该表通过命令行作为主题可见。为上述异常添加了另一个问题,因为它本身就是主题