Kafka以相反的顺序消费消息

时间:2017-04-13 21:07:47

标签: apache-kafka kafka-consumer-api

我使用Kafka 0.10,我有一个主题logs,我的IoT设备在其中发布日志,我的消息的密钥是device-id,因此同一设备的所有日志都在相同的分区。

我有一个api /devices/{id}/tail-logs,需要在拨打电话时显示一台设备的N个最后日志。

目前我以非常低效的方式(但正在工作)实现它,因为我从包含设备日志的分区开始(即最旧的日志),直到我达到当前时间戳。

一种更有效的方法是,如果我可以获得当前的最新偏移量然后向后消耗消息(我需要过滤掉一些消息以仅保留我正在寻找的设备的消息)

是否有可能用卡夫卡做到这一点?如果不是如何解决这个问题? (一个更重要的解决方案,我会看到将kafka-connect链接到一个弹性搜索,然后查询弹性搜索,但为此有两个组件似乎有点矫枉过正......)

1 个答案:

答案 0 :(得分:1)

当你在0.10.2时,我建议你写一个Kafka Streams应用程序。应用程序将是有状态的,状态将按device-id保存最后N个记录/日志 - 如果将新数据写入输入主题,Kafka Streams应用程序将只更新其状态(无需重新阅读整个主题)。

此外,该应用程序还可以使用Interactive Queries功能为您提供请求(“api /devices/{id}/tail-logs”。

因此,我不会构建一个无状态应用程序,它必须重新计算每个请求的答案,但是构建一个有状态的应用程序,它急切地计算所有可能请求的结果(并自动更新结果)(即,所有device-id s)并在请求进入时返回已计算的结果。