我想在事件到来后使用来自kafka主题的事件。我希望事件消耗的时间在消息的有效负载中。是否可以在Kafka中实现类似的目标?它有什么弊端?
实际示例:一条消息M在12:10产生,并在12:11到达我的kafka主题,我希望消费者在12:41(到达后30分钟)对其进行轮询
答案 0 :(得分:0)
Kafka的所有主题的默认保留期为7天。因此,您随时可以消耗多达一周的数据,缺点是如果您不断这样做会导致网络饱和。
如果要使用不是最新偏移量的数据,则对于任何新的使用者组,都将设置auto.offset.reset=earliest
。否则,对于现有组,您将需要使用kafka-consumer-groups --reset
命令以重新使用已经消耗的记录。
有时候,您可能要从一个主题的开头开始,例如,如果您有一个压缩的主题,为了重建主题中数据的“增量”,请查找“流/表对偶” >
我要消耗事件的时间在消息的有效负载中
顺便说一下,由于KIP-32,每个消息在有效负载之外都有一个时间戳记
我希望消费者对其进行调查...(到达后30分钟)
当然,只要数据在保留窗口内,您就可以随时启动使用者,您将获得该事件。
除了在当时(例如30分钟后)通过敏锐地吸引消费者的情况下,没有一种方法可以精确地控制何时发生。您可以使用max.poll.records
和max.poll.interval.ms
玩游戏,但是我发现大于几秒钟的内容对于Kafka而言并不是真正的用例。
例如,您宁愿在使用者线程周围使用TimerTask
,也可以安排带有Oozie / Airflow任务的Spark或MapReduce计划读取最多记录。