Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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
Apache kafka 如何在ApacheKafka主题中获取最后一个事件状态_Apache Kafka - Fatal编程技术网

Apache kafka 如何在ApacheKafka主题中获取最后一个事件状态

Apache kafka 如何在ApacheKafka主题中获取最后一个事件状态,apache-kafka,Apache Kafka,在事件驱动的体系结构中,我们使用ApacheKafka作为持久性的手段(没有可用的数据库) 我们已经设置了一个ApacheKafka主题来发布某个事件的状态 随着事件经过不同的步骤,其状态会发生变化;这些更改中的每一项都将发布在主题中: ID1:started ID2:started ID3:started ID1:intermediate 在这种情况下,如何获取某个ID的最后一个状态?您可以使用事件来获取任何给定密钥的最新状态 考虑到在下列事件中: ID1:开始 ID2:开始 ID3:开始

在事件驱动的体系结构中,我们使用ApacheKafka作为持久性的手段(没有可用的数据库)

我们已经设置了一个ApacheKafka主题来发布某个事件的状态

随着事件经过不同的步骤,其状态会发生变化;这些更改中的每一项都将发布在主题中:

ID1:started
ID2:started
ID3:started
ID1:intermediate


在这种情况下,如何获取某个ID的最后一个状态?

您可以使用事件来获取任何给定密钥的最新状态

考虑到在下列事件中:

ID1:开始 ID2:开始 ID3:开始 ID1:中间产品

如果卡夫卡主题包含以下格式的数据:

<ID1:started>
<ID2:started>
<ID3:started>
<ID1:intermediate>

其中ID1、ID2等。。是钥匙,第二部分是状态

您可以将此主题作为KTable使用:

KTable<String,String> statusTable = builder.table(TopicName);
KTable statusTable=builder.table(TopicName);
预期产出将:

<ID1:intermediate>

如果事件具有不同的键,则可以使用.map()操作更改键

您可以在此处引用概念:


要将主题作为表格使用,请参考以下方法:

主题是否压缩?这些ID是卡夫卡密钥吗?我认为它没有被压缩,但如果需要,我可以创建一个压缩的密钥。是的,这些ID可能是Kafka密钥。您描述的是压缩主题的一个用例,因为消息的最新密钥将在压缩后删除先前相同的密钥。在代码中,这可以通过使用KTable或状态存储来实现,我相信,但我对Kafka Streams api不太熟悉谢谢,你能给我看一些KTable示例代码吗?就像我说的,我对那个api不熟悉谢谢Nishu,我在研究KTable api,但我找不到一种方法来获得这样的预期输出,您可以发布一些示例代码吗?如果您将topic作为KTable使用,它将自动为您提供所有键的最新状态。我在答案中添加了链接,代码片段已经存在:)谢谢Nishu。事实证明,这个解决方案只有在一个微服务只有一个实例时才有效,但现在我们有了更多的微服务和实例。。。我将如何实现您的解决方案?是的,您是对的。这就是GlobalKTable被引入的地方。KTable和GlobalKTable的区别在于每个分区/实例都有自己的KTable,而GlobalKTable将包含所有实例的记录。使用GlobalKTable有优点也有缺点,但这取决于您的场景。你们可以在GlobalKTable上看到更多:谢谢你们Nishu。我见过GlobalKTable不是很有效率。。。你能建议一个更有效的方法吗?