[
https://issues.apache.org/jira/browse/AVRO-3719?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martin Tzvetanov Grigorov updated AVRO-3719:
--------------------------------------------
Fix Version/s: (was: 1.12.0)
> OutOfMemoryError issue in BinaryEncoder - EncoderFactory
> --------------------------------------------------------
>
> Key: AVRO-3719
> URL: https://issues.apache.org/jira/browse/AVRO-3719
> Project: Apache Avro
> Issue Type: Bug
> Components: java
> Affects Versions: 1.11.0
> Reporter: Sandeep Rathinam
> Priority: Major
>
> The issue occurred during a performance test of an application which reads
> the message send from the kafka topic, batches and compress in to avro
> message. Below is the snippet of code used to do the process mentioned above.
> public <T> byte[] encode(T map) {
> DatumWriter<T> mapWriter = new SpecificDatumWriter<>(schema);
> BinaryEncoder binaryEncoder;
> try (var out = new ByteArrayOutputStream()) {
> binaryEncoder = EncoderFactory.get().binaryEncoder(out, null);
> mapWriter.write(map, binaryEncoder);
> binaryEncoder.flush();
> return out.toByteArray();
> } catch (IOException e) {
> throw new GenericException(e.getMessage(), e);
> }
> }
> Exception message:
> java.lang.OutOfMemoryError: Java heap space
> at java.base/java.util.Arrays.copyOf(Arrays.java:3537) ~[na:na]
> at
> java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:100)
> ~[na:na]
> at
> java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:130)
> ~[na:na]
> at
> org.apache.avro.io.BufferedBinaryEncoder$OutputStreamSink.innerWrite(BufferedBinaryEncoder.java:227)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.io.BufferedBinaryEncoder.flushBuffer(BufferedBinaryEncoder.java:96)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.io.BufferedBinaryEncoder.ensureBounds(BufferedBinaryEncoder.java:115)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.io.BufferedBinaryEncoder.writeInt(BufferedBinaryEncoder.java:130)
> ~[avro-1.11.0.jar!/:1.11.0]
> at org.apache.avro.io.BinaryEncoder.writeBytes(BinaryEncoder.java:77)
> ~[avro-1.11.0.jar!/:1.11.0]
> at org.apache.avro.io.BinaryEncoder.writeString(BinaryEncoder.java:46)
> ~[avro-1.11.0.jar!/:1.11.0]
> at org.apache.avro.io.Encoder.writeString(Encoder.java:128)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeString(GenericDatumWriter.java:346)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.specific.SpecificDatumWriter.writeString(SpecificDatumWriter.java:72)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:151)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:83)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:221)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.specific.SpecificDatumWriter.writeField(SpecificDatumWriter.java:110)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:210)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.specific.SpecificDatumWriter.writeRecord(SpecificDatumWriter.java:84)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:131)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:83)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:257)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:137)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:83)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:221)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.specific.SpecificDatumWriter.writeField(SpecificDatumWriter.java:110)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:210)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.specific.SpecificDatumWriter.writeRecord(SpecificDatumWriter.java:84)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:131)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:83)
> ~[avro-1.11.0.jar!/:1.11.0]
> at
> org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:73)
> ~[avro-1.11.0.jar!/:1.11.0]
> at com.vi.edge.avro.AvroEncoder.encode(AvroEncoder.java:71)
> ~[shared-library-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT]
> at com.vi.edge.avro.AvroEncoder.encodeAndCompress(AvroEncoder.java:83)
> ~[shared-library-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)