【问题标题】:How can I read the latest entry in Kafka?如何阅读 Kafka 中的最新条目?
【发布时间】:2019-01-31 04:36:39
【问题描述】:

我正在使用 Confluent 的 .NET Client library

我需要连接到一个主题并读回其中写的最后一条消息。我不能使用绝对偏移量,因为我不知道它,而且逻辑偏移量似乎没有帮助。特别是 Offset.Endcursor 放在最后一个条目之后 ,因此任何后续读取调用(如 Consume)将返回一个更新的条目(如果可用),或者null,但不是通话时可用的最新消息。

我实际上想知道它是否是 Kafka 用例中的一个合理用例(我对它很陌生)。我找到了一些类似案例的例子,但没有任何解释这个案例,而且我找不到让其他案例适应我的好方法。我还尝试对游标进行一些算术运算,例如对它们进行求和/减法(即Offset.End-1Offset.End-new Offset(1)),但我得到的显然是无法使用的异常游标。这让我想到:为什么 +- 已经为 Offset 定义了,如果它们允许您制作无效值?但那是另一回事。

【问题讨论】:

  • 我能够使用OffsetsForTimes 取得足够好的成绩,这并不完美,但对于我的目标来说还可以。如果有一个更简单更好的解决方案,它仍然会很有趣。

标签: c# .net apache-kafka kafka-consumer-api confluent-platform


【解决方案1】:

auto.offset.reset 属性设置为最新,您的消费者将始终阅读最后一个条目。

【讨论】:

  • 我认为这不正确,我实际上尝试过,如果您将其设置为最新,则 光标 会超出最新条目,以便接收新消息,因此您不会阅读当前出现在日志中的最后一条消息。此外,我认为auto.offset.reset 旨在用于尚未提交任何消息的消费者组,这不是我的情况。
  • 如果您想阅读 kafka 中的最新记录,则设置 auto.offset.reset 是文档解释的属性 docs.confluent.io/current/clients/consumer.html 但是您可能还想禁用 auto.commit 属性,因此您不要'在处理过程中不会丢失记录。
  • 这不是我在尝试时看到的行为,而且我确实看到有几个人在描述我所看到的。例如引用Kafka: the definitive guide (O'Reilly)默认为“最新”,这意味着缺少有效偏移量,消费者将从最新记录开始读取( 已写入的记录在消费者开始运行之后 )。您参考的官方文档在定义最新的含义时实际上是模糊的。
猜你喜欢
  • 2014-11-25
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2021-06-23
  • 2014-08-15
  • 1970-01-01
相关资源
最近更新 更多