使用高级消费者和简单消费者的kafka压缩
Posted
技术标签:
【中文标题】使用高级消费者和简单消费者的kafka压缩【英文标题】:kafka compression using high level consumer and simple consumer 【发布时间】:2015-01-22 15:25:45 【问题描述】:在我的应用程序中,我们使用 Kafka 高级消费者,如果生产者和消费者使用 java API 压缩和解压缩数据,它会毫无问题地使用解压缩的数据。
如果生产者使用 librdkafka C++ API 进行压缩(snappy 或 GZIP)会发生什么? java 消费者是否能够像上面提到的那样透明地解压缩。消费者端的 fetch size 会发生什么?这是否也透明地处理。
如果使用简单的消费者模型设计 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,解压缩应该可以工作。
谢谢
【问题讨论】:
【参考方案1】:它们是兼容的,librdkafka 使用与 Scala/Java 客户端相同的压缩和框架。
增加fetch.message.max.bytes
允许消费者在每个请求中获取更大的消息或更大批量的消息,但通常可以将其保留为默认值,除非您的生产者生成的消息大于此值 - 在这种情况下,您将还需要增加message.max.bytes
。
压缩只在生产者上配置,消费者端不需要配置,因为每条消息(或一批消息)都标记有它们的压缩类型(无、snappy、gzip、..)。
【讨论】:
【参考方案2】:所有这些分布式生产者/经纪人/消费者的主要思想是无缝和透明地相互合作。这意味着您不应该知道(和关心):
生产者的实施方式 他们使用什么压缩方式(如果有的话) 有多少生产商/经纪人您的消费者只需要听他的主题/分区并知道如何处理消息。
您可以将其视为网络的类比:您的浏览器不关心 SO 是如何编写的、运行它的服务器是什么、是否使用 gzip 等等。只要他们俩都说http-它就可以工作。
【讨论】:
以上是关于使用高级消费者和简单消费者的kafka压缩的主要内容,如果未能解决你的问题,请参考以下文章