【问题标题】:Apache Kafka: Send Messages to another Topic after a period of timeApache Kafka:一段时间后将消息发送到另一个主题
【发布时间】:2021-06-17 12:30:01
【问题描述】:

我是 Apache Kafka 的新手,所以这可能是基础知识。
目前,我试图找出 Kafka 为我提供的一些可能性和功能。所以我想知道是否可以在指定时间段后将消息移动到另一个主题。

场景:
生产者 1 将消息 (M1) 写入主题 1,其中消费者 1 处理消息。
一段时间后,比如 1 小时,M1 移动到消费者 2 订阅的主题 2。

可以用 Kafka 做类似的事情吗?我知道有一种方法可以在一段时间后删除一条消息,但我不知道是否有一种方法可以更改主题或捕获删除操作。

我曾想过在 Producer 中运行一个计时器,但由于数据量巨大,我认为这已经不可能了。

提前致谢

编辑:
感谢@OneCricketeer,我知道,我对几个制作人的第一个假设并没有那么糟糕。 我知道一个 Producer 的吞吐量非常好,而且不会让系统崩溃。 但我仍然担心第二个制片人。
在我的想象中它就像下面的粗略图像

当我每分钟接收 30 条消息时,这意味着我将拥有 31 个生产者实例。 1 个尽快处理消息,另外 30 个等待计时器确定,以便他们可以处理他们的消息。
算上一个小时,大约有 1800 个实例。这就是我关心的地方。或者有没有更好的方法来处理这个?

【问题讨论】:

  • 您可以将数据与定时生产者一起排队,是的。你有什么问题?
  • 我正在考虑一个系统,它每分钟处理大约 30 条消息或类似的东西。当我为每个运行时间超过一个小时的新对象添加时,我猜这可能会随着时间的推移杀死服务器
  • 只有一种方法可以找出答案。如果是这样,增加堆空间
  • 所以我假设没有别的办法?
  • 我们的 Kafka 生产者每分钟发送超过 30 条消息(甚至可能高于每秒)。生产者已经有一个以字节为单位的内部batch.size 设置,无论如何都限制/批量请求,因此仅凭这一点杀死服务器是不可能的

标签: apache-kafka


【解决方案1】:

我找到了可能适用于我的情况的解决方案。 我不小心偶然发现了一个 Consumer-Methode,它允许您根据时间戳读取消息。 该方法称为 offsetsForTimes,从 0.10 版开始可用。

查看the Kafka API 或以下post,我发现它们正在研究该方法。

也许这对其他人有用,所以我决定发布。

【讨论】:

    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2021-03-18
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多