在我的应用程序中,我们使用kafka高级使用者,如果生产者和使用者使用javaapi对数据进行压缩和解压,则该使用者将无任何问题地使用解压后的数据。
如果生产者使用librdkafka capi进行压缩(snappy或gzip),会发生什么情况?java使用者是否能够像上面提到的那样透明地解压缩。用户端的fetch大小会发生什么变化?这也是透明处理的。
如果Kafka消费者是使用简单的消费者模型设计的,会发生什么?我们是否必须显式地解压缩来自producer的压缩数据(假设这里使用librdkafka capi)。
我在想,如果在生产者端使用librdkafka c++api进行压缩,高级使用者可能无法工作?请澄清我,如果我在这里是错的,因为我看到一些其他的帖子在这里Kafka消息编解码器-压缩和解压缩。与此相反,我发现另一个链接说,如果高级消费者使用http://grokbase.com/t/kafka/users/142veppeyv/unable-to-consume-snappy-compressed-messages-with-simple-consumer.
谢谢
2条答案
按热度按时间dfty9e191#
所有这些分布式生产者/经纪人/消费者的主要思想是无缝和透明地相互协作。这意味着你不应该知道(和关心):
如何实现生产者
他们使用什么压缩(如果有的话)
有多少生产商/经纪人
您的消费者只需要听他的主题/分区,并知道如何处理消息。
你可以把它看作是网络的一个类比:你的浏览器不关心它是如何编写的,运行它的服务器是什么,它是否使用gzip等等。只要他们两个都说http,就行了。
mgdq6dx12#
它们是兼容的,librdkafka使用与scala/java客户机相同的压缩和帧。
增加的
fetch.message.max.bytes
允许使用者在每个请求中获取较大的消息或较大的消息批,但通常可以将其保留为默认值,除非生产者生成的消息大于此值—在这种情况下,还需要增加message.max.bytes
.压缩只在生产者上配置,消费端不需要配置,因为每个消息(或一批消息)都用其压缩类型(none、snappy、gzip等)进行标记。