1

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

如果生产者使用librdkafka C++ API 进行压缩(snappy 或 GZIP)会发生什么?java 消费者是否能够像上面提到的那样透明地解压缩。消费者端的 fetch size 会发生什么?这是否也透明地处理。

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

我在想,如果生产者端的librdkafka C++ API 发生压缩,高级消费者可能无法工作?如果我在这里错了,请清除我,因为我在这里看到了一些其他帖子Kafka 消息编解码器 - 压缩和解压缩。与此相反,我发现另一个链接说,如果高级消费者使用http://grokbase.com/t/kafka/users/142veppeyv/unable-to-consume-snappy-compressed-messages-with-simple ,解压缩应该可以工作-消费者

谢谢

4

2 回答 2

3

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

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

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

于 2015-01-22T21:41:40.130 回答
1

所有这些分布式生产者/经纪人/消费者的主要思想是无缝和透明地相互合作。这意味着您不应该知道(和关心):

  • 生产者是如何实现的
  • 他们使用什么压缩方式(如果有的话)
  • 有多少生产商/经纪人

您的消费者只需要听他的主题/分区并知道如何处理消息。

您可以将其视为网络的类比:您的浏览器不关心 SO 是如何编写的、运行它的服务器是什么、是否使用 gzip 等等。只要他们俩都说http-它就可以工作。

于 2015-01-23T00:11:25.510 回答