【问题标题】:Kafka compression: How to do compression at single message levelKafka 压缩:如何在单个消息级别进行压缩
【发布时间】:2017-08-11 06:22:29
【问题描述】:

当我向 Kafka 主题发送消息时,我可能会收到一条比其他消息大得多的消息。

因此需要在单个消息级别进行压缩。 根据https://cwiki.apache.org/confluence/display/KAFKA/Compression

一组消息可以被压缩并表示为一个压缩的 消息。

也按照这里给出的描述 https://github.com/apache/kafka/blob/0.10.1/clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 对于属性compression.type,

压缩是整批数据,所以分批的功效 也会影响压缩比(更多的批处理意味着更好 压缩)。;

我应该将批处理大小设置为一个/禁用批处理以在每个消息级别进行压缩吗?

【问题讨论】:

  • 为什么不能接受批量压缩?
  • 我没说。我的意图是,如果一条消息很大并且我启用了批处理,它会压缩并发送消息/等待下一条消息完成批处理约束吗?
  • @AnilKumar,你得到了这个问题的答案,我现在面临同样的问题,每条消息都很大,我要压缩,每条消息都发送,有可能吗?
  • 不吹不黑。我没有得到任何

标签: apache-kafka kafka-producer-api


【解决方案1】:

压缩与是否批量生产的问题是正交的。虽然,如文档中所述:

更多的批处理意味着更好的压缩

压缩可以在主题级别 (https://kafka.apache.org/documentation/#topicconfigs) 或作为生产者配置的一部分 (https://kafka.apache.org/documentation/#producerconfigs) 设置。此外,同一主题中的不同消息可以使用不同的类型进行压缩,因为压缩类型是记录元数据的一部分(https://kafka.apache.org/documentation/#recordbatch),对消费者来说是无缝的。

但是,如果您需要选择性地压缩不同的消息,则无法使用同一个生产者来完成,因为生产者配置是静态的。无论做出这种选择的动机是什么,您都可以只创建两个生产者实例(一个支持压缩,一个不压缩),然后根据消息内容决定使用哪个生产者发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2019-09-20
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多