从ktable中发出值并对其进行修改

时间:2017-03-13 23:40:22

标签: java apache-kafka apache-kafka-streams

我正在尝试用kafka解决以下问题。 有一个话题。我们称之为src-topic。我不时收到这个主题的记录。我想将这些值存储在ktable中,并每隔10秒将存储在ktable中的值发送到dst-topic。当我第一次从这个ktable发出一个值时,我想将1附加到我发出的记录中。以后每次我都要将0附加到发出的记录中。

我正在寻找一个正确且优选惯用的解决方案。 我看到的解决方案之一是当我从src-topic中摄取时附加1的记录,然后在ktable中存储附加0的记录。另一个主题是从这个ktable读取并定期发出记录。这种方法的问题在于它具有竞争条件。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

没有直接的方法来做到这一点。注意,KTable是更改日志(它可能在内部有一个表状态 - 并非所有KTable都有状态 - 但这是一个实现细节。)

因此,KTable是一个流而你无法刷新流...而且因为状态(如果有的话)是内部的,你也不能刷新状态。

您只能通过交互式查询访问状态,该查询也允许进行范围扫描。但是,这不会向下游发出任何内容,而是将数据提供给应用程序的“非Streams部分”。

我认为,您需要使用低级处理器API来获得所需的结果。