在我的应用程序中,如果生产者和消费者使用java API压缩和解压缩数据,我们正在使用Kafka高级消费者,它消耗解压缩的数据而没有任何问题。
如果制作人使用 librdkafka C ++ API进行压缩(snappy或GZIP),会发生什么? java消费者能否像上面提到的那样透明地解压缩。消费者端的提取大小会发生什么?这也是透明处理的。
如果kafka消费者是使用简单的消费者模式设计的,会发生什么?我们是否必须明确解压缩来自生产者的压缩数据(假设 librdkafka 此处使用的C ++ API)。
我认为高级消费者可能无法在生产者端使用 librdkafka C ++ API进行压缩的情况下工作?请告诉我,如果我在这里错了,因为我在这里看了一些其他帖子Kafka message codec - compress and decompress。与此相反,我发现另一个链接说如果高级消费者使用http://grokbase.com/t/kafka/users/142veppeyv/unable-to-consume-snappy-compressed-messages-with-simple-consumer,减压应该有效。
由于
答案 0 :(得分:3)
它们是兼容的,librdkafka使用与Scala / Java客户端相同的压缩和框架。
增加fetch.message.max.bytes
允许消费者使用每个请求获取更大的消息或更大批量的消息,但它通常可以保留其默认值,除非您的生成者生成大于此值的消息 - 在这种情况下你还需要增加message.max.bytes
。
压缩仅在生产者上配置,消费者端不需要配置,因为每个消息(或一批消息)都标记有压缩类型(none,snappy,gzip,..)。
答案 1 :(得分:0)
所有这些分布式生产者/经纪人/消费者的主要思想是无缝透明地相互合作。这意味着你不应该知道(和关心):
您的消费者只需要听他的主题/分区,并知道如何处理消息。
您可以将其视为网络的类比:您的浏览器不关心SO是如何编写的,服务器运行的是什么,是否使用gzip等等。只要他们都说http - 它就会起作用。