到达后是否可能向消费者发送卡夫卡消息?

时间:2019-01-10 20:10:45

标签: apache-kafka kafka-consumer-api

我想在事件到来后使用来自kafka主题的事件。我希望事件消耗的时间在消息的有效负载中。是否可以在Kafka中实现类似的目标?它有什么弊端?

实际示例:一条消息M在12:10产生,并在12:11到达我的kafka主题,我希望消费者在12:41(到达后30分钟)对其进行轮询

1 个答案:

答案 0 :(得分:0)

Kafka的所有主题的默认保留期为7天。因此,您随时可以消耗多达一周的数据,缺点是如果您不断这样做会导致网络饱和。

如果要使用不是最新偏移量的数据,则对于任何新的使用者组,都将设置auto.offset.reset=earliest。否则,对于现有组,您将需要使用kafka-consumer-groups --reset命令以重新使用已经消耗的记录。

有时候,您可能要从一个主题的开头开始,例如,如果您有一个压缩的主题,为了重建主题中数据的“增量”,请查找“流/表对偶”

  

我要消耗事件的时间在消息的有效负载中

顺便说一下,由于KIP-32,每个消息在有效负载之外都有一个时间戳记

  

我希望消费者对其进行调查...(到达后30分钟)

当然,只要数据在保留窗口内,您就可以随时启动使用者,您将获得该事件。

除了在当时(例如30分钟后)通过敏锐地吸引消费者的情况下,没有一种方法可以精确地控制何时发生。您可以使用max.poll.recordsmax.poll.interval.ms玩游戏,但是我发现大于几秒钟的内容对于Kafka而言并不是真正的用例。

例如,您宁愿在使用者线程周围使用TimerTask,也可以安排带有Oozie / Airflow任务的Spark或MapReduce计划读取最多记录。