Class KafkaSink<IN>
- java.lang.Object
-
- org.apache.flink.connector.kafka.sink.KafkaSink<IN>
-
- Type Parameters:
IN- type of the records written to Kafka
- All Implemented Interfaces:
Serializable,org.apache.flink.api.connector.sink2.Sink<IN>,org.apache.flink.api.connector.sink2.StatefulSink<IN,org.apache.flink.connector.kafka.sink.KafkaWriterState>,org.apache.flink.api.connector.sink2.TwoPhaseCommittingSink<IN,org.apache.flink.connector.kafka.sink.KafkaCommittable>
@PublicEvolving public class KafkaSink<IN> extends Object implements org.apache.flink.api.connector.sink2.StatefulSink<IN,org.apache.flink.connector.kafka.sink.KafkaWriterState>, org.apache.flink.api.connector.sink2.TwoPhaseCommittingSink<IN,org.apache.flink.connector.kafka.sink.KafkaCommittable>
Flink Sink to produce data into a Kafka topic. The sink supports all delivery guarantees described byDeliveryGuarantee.DeliveryGuarantee.NONEdoes not provide any guarantees: messages may be lost in case of issues on the Kafka broker and messages may be duplicated in case of a Flink failure.DeliveryGuarantee.AT_LEAST_ONCEthe sink will wait for all outstanding records in the Kafka buffers to be acknowledged by the Kafka producer on a checkpoint. No messages will be lost in case of any issue with the Kafka brokers but messages may be duplicated when Flink restarts.DeliveryGuarantee.EXACTLY_ONCE: In this mode the KafkaSink will write all messages in a Kafka transaction that will be committed to Kafka on a checkpoint. Thus, if the consumer reads only committed data (see Kafka consumer config isolation.level), no duplicates will be seen in case of a Flink restart. However, this delays record writing effectively until a checkpoint is written, so adjust the checkpoint duration accordingly. Please ensure that you use uniquetransactionalIdPrefixs across your applications running on the same Kafka cluster such that multiple running jobs do not interfere in their transactions! Additionally, it is highly recommended to tweak Kafka transaction timeout (link) >> maximum checkpoint duration + maximum restart duration or data loss may happen when Kafka expires an uncommitted transaction.- See Also:
on how to construct a KafkaSink, Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.flink.api.connector.sink2.Sink
org.apache.flink.api.connector.sink2.Sink.InitContext
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <IN> KafkaSinkBuilder<IN>builder()Create aKafkaSinkBuilderto construct a newKafkaSink.org.apache.flink.api.connector.sink2.Committer<org.apache.flink.connector.kafka.sink.KafkaCommittable>createCommitter()org.apache.flink.connector.kafka.sink.KafkaWriter<IN>createWriter(org.apache.flink.api.connector.sink2.Sink.InitContext context)org.apache.flink.core.io.SimpleVersionedSerializer<org.apache.flink.connector.kafka.sink.KafkaCommittable>getCommittableSerializer()protected PropertiesgetKafkaProducerConfig()org.apache.flink.core.io.SimpleVersionedSerializer<org.apache.flink.connector.kafka.sink.KafkaWriterState>getWriterStateSerializer()org.apache.flink.connector.kafka.sink.KafkaWriter<IN>restoreWriter(org.apache.flink.api.connector.sink2.Sink.InitContext context, Collection<org.apache.flink.connector.kafka.sink.KafkaWriterState> recoveredState)
-
-
-
Method Detail
-
builder
public static <IN> KafkaSinkBuilder<IN> builder()
Create aKafkaSinkBuilderto construct a newKafkaSink.- Type Parameters:
IN- type of incoming records- Returns:
KafkaSinkBuilder
-
createCommitter
@Internal public org.apache.flink.api.connector.sink2.Committer<org.apache.flink.connector.kafka.sink.KafkaCommittable> createCommitter() throws IOException- Specified by:
createCommitterin interfaceorg.apache.flink.api.connector.sink2.TwoPhaseCommittingSink<IN,org.apache.flink.connector.kafka.sink.KafkaCommittable>- Throws:
IOException
-
getCommittableSerializer
@Internal public org.apache.flink.core.io.SimpleVersionedSerializer<org.apache.flink.connector.kafka.sink.KafkaCommittable> getCommittableSerializer()
- Specified by:
getCommittableSerializerin interfaceorg.apache.flink.api.connector.sink2.TwoPhaseCommittingSink<IN,org.apache.flink.connector.kafka.sink.KafkaCommittable>
-
createWriter
@Internal public org.apache.flink.connector.kafka.sink.KafkaWriter<IN> createWriter(org.apache.flink.api.connector.sink2.Sink.InitContext context) throws IOException
- Specified by:
createWriterin interfaceorg.apache.flink.api.connector.sink2.Sink<IN>- Specified by:
createWriterin interfaceorg.apache.flink.api.connector.sink2.StatefulSink<IN,org.apache.flink.connector.kafka.sink.KafkaWriterState>- Specified by:
createWriterin interfaceorg.apache.flink.api.connector.sink2.TwoPhaseCommittingSink<IN,org.apache.flink.connector.kafka.sink.KafkaCommittable>- Throws:
IOException
-
restoreWriter
@Internal public org.apache.flink.connector.kafka.sink.KafkaWriter<IN> restoreWriter(org.apache.flink.api.connector.sink2.Sink.InitContext context, Collection<org.apache.flink.connector.kafka.sink.KafkaWriterState> recoveredState) throws IOException
- Specified by:
restoreWriterin interfaceorg.apache.flink.api.connector.sink2.StatefulSink<IN,org.apache.flink.connector.kafka.sink.KafkaWriterState>- Throws:
IOException
-
getWriterStateSerializer
@Internal public org.apache.flink.core.io.SimpleVersionedSerializer<org.apache.flink.connector.kafka.sink.KafkaWriterState> getWriterStateSerializer()
- Specified by:
getWriterStateSerializerin interfaceorg.apache.flink.api.connector.sink2.StatefulSink<IN,org.apache.flink.connector.kafka.sink.KafkaWriterState>
-
getKafkaProducerConfig
@VisibleForTesting protected Properties getKafkaProducerConfig()
-
-