You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@kafka.apache.org by Raymond Ng <ra...@gmail.com> on 2012/09/11 17:30:15 UTC

advice on using compressionCodec

Hi all

I'm using kafka 0.7.0 and trying to process a message thats been GZIP
compressed

my test program which writes to a kafka queue has compression.codec = "1",
and i can see the message has been written to the kafka server in a
compressed format

but I'm having trouble decompressing the message on the other end, my code
as follows

private void getMessage() {
   SimpleConsumer consumer =
kafkaPartitionsConns.getConsumer(currentPartition);
   int hostPartition =
kafkaPartitionsConns.getHostPartition(currentPartition);

   ByteBufferMessageSet msgs = consumer.fetch(
     new FetchRequest(
       kafkaConf.topic,
       hostPartition,
       msgOffset,
       kafkaConf.fetchSizeBytes));
   java.util.Iterator <MessageAndOffset> compressedMsgSet = msgs.iterator();

   while(compressedMsgSet.hasNext()) {
    MessageAndOffset mao = compressedMsgSet.next();
    Message msg = mao.message();
    logger.info("msg : "+msg.toString());
    Iterator decompressedMsgSet =
CompressionUtils.decompress(mao.message()).iterator();
    while (decompressedMsgSet.hasNext()) {
     msgAwaiting.add(decompressedMsgSet.next());
    }
   }
}

2012-09-11 16:16:24,581  INFO [Thread-3] KafkaTest.java - msg :
message(magic = 1, attributes = 0, crc = 3908262406, payload =
java.nio.HeapByteBuffer[pos=0 lim=7 cap=7])
2012-09-11 16:16:24,582 ERROR [Thread-3] PollableSourceRunner.java -
Unhandled exception, logging and sleeping for 5000ms
kafka.common.UnknownCodecException: Unknown Codec: NoCompressionCodec
 at kafka.message.CompressionUtils$.decompress(CompressionUtils.scala:142)
 at kafka.message.CompressionUtils.decompress(CompressionUtils.scala)

I need to parse the message back to String for further processing, but
can't work out why the original message didn't carry any compressionCodec
any advice will be appreciated

-- 
Rgds
Ray

Re: advice on using compressionCodec

Posted by Neha Narkhede <ne...@gmail.com>.
Raymond,

The consumer iterator will decompress the messages and then return to
the client. So you don't need to explicitly decompress data.

Thanks,
Neha

On Tue, Sep 11, 2012 at 8:30 AM, Raymond Ng <ra...@gmail.com> wrote:
> Hi all
>
> I'm using kafka 0.7.0 and trying to process a message thats been GZIP
> compressed
>
> my test program which writes to a kafka queue has compression.codec = "1",
> and i can see the message has been written to the kafka server in a
> compressed format
>
> but I'm having trouble decompressing the message on the other end, my code
> as follows
>
> private void getMessage() {
>    SimpleConsumer consumer =
> kafkaPartitionsConns.getConsumer(currentPartition);
>    int hostPartition =
> kafkaPartitionsConns.getHostPartition(currentPartition);
>
>    ByteBufferMessageSet msgs = consumer.fetch(
>      new FetchRequest(
>        kafkaConf.topic,
>        hostPartition,
>        msgOffset,
>        kafkaConf.fetchSizeBytes));
>    java.util.Iterator <MessageAndOffset> compressedMsgSet = msgs.iterator();
>
>    while(compressedMsgSet.hasNext()) {
>     MessageAndOffset mao = compressedMsgSet.next();
>     Message msg = mao.message();
>     logger.info("msg : "+msg.toString());
>     Iterator decompressedMsgSet =
> CompressionUtils.decompress(mao.message()).iterator();
>     while (decompressedMsgSet.hasNext()) {
>      msgAwaiting.add(decompressedMsgSet.next());
>     }
>    }
> }
>
> 2012-09-11 16:16:24,581  INFO [Thread-3] KafkaTest.java - msg :
> message(magic = 1, attributes = 0, crc = 3908262406, payload =
> java.nio.HeapByteBuffer[pos=0 lim=7 cap=7])
> 2012-09-11 16:16:24,582 ERROR [Thread-3] PollableSourceRunner.java -
> Unhandled exception, logging and sleeping for 5000ms
> kafka.common.UnknownCodecException: Unknown Codec: NoCompressionCodec
>  at kafka.message.CompressionUtils$.decompress(CompressionUtils.scala:142)
>  at kafka.message.CompressionUtils.decompress(CompressionUtils.scala)
>
> I need to parse the message back to String for further processing, but
> can't work out why the original message didn't carry any compressionCodec
> any advice will be appreciated
>
> --
> Rgds
> Ray