如何在kafka中禁用标头消费

时间:2018-11-19 18:42:10

标签: apache-kafka kafka-consumer-api

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

任何一种我只能使用消息内容而保留标头的选项,这样可以节省时间在网络上传输标头并在使用方反序列化标头。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

每条消息都是带有标题的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。

如评论中所述,这里最可靠的方法是停止在上游应用程序中发送大量信息。或中间立场是对该数据进行压缩和/或二进制编码。