|
22 | 22 | import org.opensearch.dataprepper.plugins.buffer.blockingbuffer.BlockingBuffer; |
23 | 23 | import org.apache.kafka.common.errors.RecordTooLargeException; |
24 | 24 | import org.apache.kafka.common.errors.RecordBatchTooLargeException; |
| 25 | +import org.opensearch.dataprepper.plugins.codec.CompressionOption; |
25 | 26 | import org.opensearch.dataprepper.plugins.encryption.EncryptionSupplier; |
26 | 27 | import org.opensearch.dataprepper.plugins.kafka.admin.KafkaAdminAccessor; |
27 | 28 | import org.opensearch.dataprepper.plugins.kafka.buffer.serialization.BufferSerializationFactory; |
28 | 29 | import org.opensearch.dataprepper.plugins.kafka.common.KafkaMdc; |
29 | 30 | import org.opensearch.dataprepper.plugins.kafka.common.serialization.CommonSerializationFactory; |
30 | 31 | import org.opensearch.dataprepper.plugins.kafka.common.serialization.SerializationFactory; |
31 | 32 | import org.opensearch.dataprepper.plugins.kafka.common.thread.KafkaPluginThreadFactory; |
| 33 | +import org.opensearch.dataprepper.plugins.kafka.configuration.EncryptionType; |
32 | 34 | import org.opensearch.dataprepper.plugins.kafka.consumer.KafkaCustomConsumer; |
33 | 35 | import org.opensearch.dataprepper.plugins.kafka.consumer.KafkaCustomConsumerFactory; |
34 | 36 | import org.opensearch.dataprepper.plugins.kafka.producer.KafkaCustomProducer; |
|
40 | 42 | import org.slf4j.MDC; |
41 | 43 |
|
42 | 44 | import java.time.Duration; |
43 | | -import java.util.Collection; |
44 | | -import java.util.List; |
45 | | -import java.util.Map; |
46 | | -import java.util.Optional; |
| 45 | +import java.util.*; |
47 | 46 | import java.util.concurrent.ExecutorService; |
48 | 47 | import java.util.concurrent.Executors; |
49 | 48 | import java.util.concurrent.TimeUnit; |
@@ -77,22 +76,29 @@ public KafkaBuffer(final PluginSetting pluginSetting, final KafkaBufferConfig ka |
77 | 76 | final CircuitBreaker circuitBreaker, |
78 | 77 | final EncryptionSupplier encryptionSupplier) { |
79 | 78 | super(kafkaBufferConfig.getCustomMetricPrefix().orElse(pluginSetting.getName()+"buffer"), pluginSetting.getPipelineName()); |
| 79 | + |
| 80 | + CompressionOption manualCompressionConfig = CompressionOption.NONE; |
| 81 | + if (kafkaBufferConfig.getTopic().encryptionAtRestEnabled()) { |
| 82 | + // If encryption is enabled, disable Kafka built-in compression and do it manually. |
| 83 | + manualCompressionConfig = CompressionOption.fromOptionValue(kafkaBufferConfig.getKafkaProducerProperties().getCompressionType()); |
| 84 | + kafkaBufferConfig.getKafkaProducerProperties().setCompressionType(CompressionOption.NONE.name().toLowerCase()); |
| 85 | + } |
| 86 | + |
80 | 87 | final SerializationFactory serializationFactory = new BufferSerializationFactory(new CommonSerializationFactory(), encryptionSupplier); |
81 | 88 | final KafkaCustomProducerFactory kafkaCustomProducerFactory = new KafkaCustomProducerFactory(serializationFactory, awsCredentialsSupplier, new TopicServiceFactory()); |
82 | 89 | this.byteDecoder = byteDecoder; |
83 | 90 | final String metricPrefixName = kafkaBufferConfig.getCustomMetricPrefix().orElse(pluginSetting.getName()); |
84 | 91 | final PluginMetrics producerMetrics = PluginMetrics.fromNames(metricPrefixName + WRITE, pluginSetting.getPipelineName()); |
85 | | - producer = kafkaCustomProducerFactory.createProducer(kafkaBufferConfig, null, null, producerMetrics, null, false); |
| 92 | + producer = kafkaCustomProducerFactory.createProducer(kafkaBufferConfig, null, null, producerMetrics, null, false, manualCompressionConfig); |
86 | 93 | final KafkaCustomConsumerFactory kafkaCustomConsumerFactory = new KafkaCustomConsumerFactory(serializationFactory, awsCredentialsSupplier); |
87 | 94 | innerBuffer = new BlockingBuffer<>(INNER_BUFFER_CAPACITY, INNER_BUFFER_BATCH_SIZE, pluginSetting.getPipelineName()); |
88 | 95 | this.shutdownInProgress = new AtomicBoolean(false); |
89 | 96 | final PluginMetrics consumerMetrics = PluginMetrics.fromNames(metricPrefixName + READ, pluginSetting.getPipelineName()); |
90 | 97 | this.consumers = kafkaCustomConsumerFactory.createConsumersForTopic(kafkaBufferConfig, kafkaBufferConfig.getTopic(), |
91 | | - innerBuffer, consumerMetrics, acknowledgementSetManager, byteDecoder, shutdownInProgress, false, circuitBreaker); |
| 98 | + innerBuffer, consumerMetrics, acknowledgementSetManager, byteDecoder, shutdownInProgress, false, circuitBreaker, manualCompressionConfig); |
92 | 99 | this.kafkaAdminAccessor = new KafkaAdminAccessor(kafkaBufferConfig, List.of(kafkaBufferConfig.getTopic().getGroupId())); |
93 | 100 | this.executorService = Executors.newFixedThreadPool(consumers.size(), KafkaPluginThreadFactory.defaultExecutorThreadFactory(MDC_KAFKA_PLUGIN_VALUE)); |
94 | 101 | consumers.forEach(this.executorService::submit); |
95 | | - |
96 | 102 | this.drainTimeout = kafkaBufferConfig.getDrainTimeout(); |
97 | 103 | } |
98 | 104 |
|
|
0 commit comments