Apache kafka 从卡夫卡获取最新值

Apache kafka 从卡夫卡获取最新值,apache-kafka,apache-kafka-streams,ksqldb,Apache Kafka,Apache Kafka Streams,Ksqldb,我有一个卡夫卡主题,叫做a 主题A中的数据格式为: { id : 1, name:stackoverflow, created_at:2017-09-28 22:30:00.000} { id : 2, name:confluent, created_at:2017-09-28 22:00:00.000} { id : 3, name:kafka, created_at:2017-09-28 24:42:00.000} { id : 4, name:apache, created_at:2017

我有一个卡夫卡主题,叫做a

主题A中的数据格式为:

{ id : 1, name:stackoverflow, created_at:2017-09-28 22:30:00.000}
{ id : 2, name:confluent, created_at:2017-09-28 22:00:00.000}
{ id : 3, name:kafka, created_at:2017-09-28 24:42:00.000}
{ id : 4, name:apache, created_at:2017-09-28 24:41:00.000}
现在在消费者方面,我只想获得一小时窗口的最新数据,这意味着每一小时我需要根据创建的时间从主题中获取最新的值

我的预期产出是:

{ id : 1, name:stackoverflow, created_at:2017-09-28 22:30:00.000}
{ id : 3, name:kafka, created_at:2017-09-28 24:42:00.000}
我认为ksql可以解决这个问题,但我不确定。请帮帮我


提前感谢。

是的,您可以为此使用KSQL。请尝试以下操作:

createstreams1(id-BIGINT,name-VARCHAR,在VARCHAT创建),带有(kafka_-topic='topic_-name',value_-format='JSON')

CREATE TABLE maxRow AS SELECT id,name,max(STRINGTOTIMESTAMP(创建于'yyyy-mm-dd hh:mm:ss.SSS'))AS crete_at FROM s1 WINDOW TUMBLING(大小1小时)按id,name分组

结果将在
时间以linux时间戳格式创建
。您可以在新查询中使用TIMESTAMPTOSTRING udf将其更改为所需的格式。

如果您发现任何问题,请告诉我。

您的钥匙是什么?您认为钥匙可能是信息1、信息2等等。。。上面提到的是valuesCool。我只是想确保您记住键,因为Kafka Streams通过键聚合/分组/根据键执行所有操作。感谢您的回答,我可以将1小时窗口缩短为10分钟吗?这也会导致任何性能问题吗?当然,您可以使用
(大小10分钟)
。它不应该有任何重大的性能问题。感谢您的回答,还有一个问题是ksql是否将数据存储在内存或磁盘中?内部状态存储使用RocksDB并将状态存储在内存中。查询的结果将被写入卡夫卡主题,当然这些主题都在磁盘上@matthias-j-sax是否可以使用KTable实现这一点?如果有的话,有什么例子吗?