使用高级消费者和简单消费者的kafka压缩

kafka compression using high level consumer and simple consumer

在我的应用程序中,我们使用的是 Kafka 高级消费者,如果生产者和消费者使用 java API 压缩和解压缩数据,它可以毫无问题地使用解压缩的数据。

如果生产者使用 librdkafka C++ API 进行压缩(snappy 或 GZIP)会怎样? java 消费者是否能够像在上述情况下那样透明地解压缩。消费者端的获取大小会发生什么?这也透明处理吗

如果使用简单的消费者模型设计kafka消费者会怎样?我们是否必须显式解压缩来自生产者的压缩数据(假设此处使用 librdkafka C++ API)。

我在想,如果在生产者端使用 librdkafka C++ API 进行压缩,那么高级消费者可能无法工作?如果我在这里错了,请清除我,因为我在这里 Kafka message codec - compress and decompress. As oppose to this i found an another link says decompression supposed to work if high level consumer used http://grokbase.com/t/kafka/users/142veppeyv/unable-to-consume-snappy-compressed-messages-with-simple-consumer.

看到了其他一些 post

谢谢

它们是兼容的,librdkafka 使用与 Scala/Java 客户端相同的压缩和分帧。

增加 fetch.message.max.bytes 允许消费者在每个请求中获取更大的消息或更大批量的消息,但通常可以将其保留为默认值,除非您的生产者生成的消息大于此值 - 在在这种情况下,您还需要增加 message.max.bytes

压缩仅在生产者上配置,消费者端不需要配置,因为每条消息(或一批消息)都标有它们的压缩类型(none、snappy、gzip、..) .

所有这些分布式 producers/brokers/consumers 的主要思想是无缝透明地相互协作。这意味着你不应该知道(和关心):

  • 生产者是如何实现的
  • 他们使用什么压缩(如果有)
  • 有多少producers/brokers

您的消费者只需要听他的 topic/partition 并知道如何处理消息。

你可以把它看成是web的类比:你的浏览器不关心SO是怎么写的,运行在什么服务器上,是否使用gzip等等。只要他们都说 http - 它就可以工作。