Kafka Producer Ack(確認)機制用于確保消息被成功發送到Kafka集群。生產者發送消息后,需要等待Kafka集群的響應,以確認消息已被成功處理。Kafka Producer Ack有三種模式:0、1和all。
要實現同步發送,你需要將ProducerAck設置為1(或all)。以下是使用Java客戶端庫的示例:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.8.0</version>
</dependency>
acks
屬性為1(或all):Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("acks", "1"); // 或者 props.put("acks", "all");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("your-topic", "key", "value"), new Callback() {
@Override
public void onCompletion(RecordMetadata metadata, Exception exception) {
if (exception != null) {
System.out.println("發送消息失敗: " + exception.getMessage());
} else {
System.out.println("消息發送成功,分區: " + metadata.partition() + ", 偏移量: " + metadata.offset());
}
}
});
在這個示例中,我們設置了acks
屬性為1,這意味著生產者將在收到Kafka集群的確認響應后才認為消息發送成功。如果設置為all
,生產者將等待所有同步副本都確認收到消息后才認為發送成功。請注意,這可能會降低消息發送的速度。