【问题标题】:How to disable headers from Consuming in kafka如何在kafka中禁用标头消费
【发布时间】:2019-04-22 04:15:59
【问题描述】:

是否有任何选项可以禁用消费者使用的 Kafka 标头。在我的例子中,我编写了一个消费者来消费来自上游系统发布的 Kafka 主题的消息。我的处理不需要来自标头的任何信息,并且已发布的标头很重(大于消息本身的大小)。所以我的消费者花费的时间比预期的要长。

我只能使用留下标头的消息内容的任何选项,以便节省通过网络传输标头并在消费者处反序列化它们的时间。感谢您的帮助。

【问题讨论】:

  • Kafka 的标头非常少。它只是一条消息,只是简单的字节数组和一个可选的键。然后可能是偏移量和时间戳。如果您的上游应用程序正在发送较大的标头,则由该应用程序停止发送它们。
  • @mjuarez 正确。标头是由上游应用程序添加的,我没有任何控制来阻止它们或要求他们停止发布标头。因为像我这样的多个下游正在使用已发布的事件。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

每条消息都是带有标头的a Record(从 Kafka 0.11 开始)。

length: varint
attributes: int8
    bit 0~7: unused
timestampDelta: varint
offsetDelta: varint
keyLength: varint
key: byte[]
valueLen: varint
value: byte[]
Headers => [Header]

记录标题

headerKeyLength: varint
headerKey: String
headerValueLength: varint
Value: byte[]

即使您忽略反序列化它们,它们仍将作为记录的 TCP 数据包主体的一部分通过线路发送。

例如,您可以尝试使用 Kafka 0.10.2 客户端版本,这可能会完全删除标头,因为它们不是 API 的一部分,而是 YMMV。

正如 cmets 中提到的,这里最可靠的方法是停止在上游应用程序中发送如此大量的信息。或者中间立场是压缩和/或二进制编码该数据。

【讨论】:

  • 我们知道标头是记录的一部分。但我想知道是否有任何属性可以禁用此功能。
  • 没有,但默认为空
猜你喜欢
  • 2022-01-11
  • 1970-01-01
  • 2015-11-13
  • 2018-04-03
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多