You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by gu...@apache.org on 2022/08/19 17:10:01 UTC
[kafka] branch trunk updated: MINOR: Improve KafkaProducer Javadocs (#12537)
This is an automated email from the ASF dual-hosted git repository.
guozhang pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 5d32f24cc3 MINOR: Improve KafkaProducer Javadocs (#12537)
5d32f24cc3 is described below
commit 5d32f24cc3597760d3b846647e6a19dddc6e3d71
Author: Guozhang Wang <wa...@gmail.com>
AuthorDate: Fri Aug 19 10:09:48 2022 -0700
MINOR: Improve KafkaProducer Javadocs (#12537)
While reviewing KIP-588 and KIP-691 I went through the exception throwing behavior and wanted to improve the related javadocs a little bit.
Reviewers: John Roesler <vv...@apache.org>
---
.../kafka/clients/producer/KafkaProducer.java | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java b/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java
index 2d5c8994b4..ec8b8725c8 100644
--- a/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java
+++ b/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java
@@ -675,6 +675,11 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
* and should also not commit offsets manually (via {@link KafkaConsumer#commitSync(Map) sync} or
* {@link KafkaConsumer#commitAsync(Map, OffsetCommitCallback) async} commits).
*
+ * <p>
+ * This method is a blocking call that waits until the request has been received and acknowledged by the consumer group
+ * coordinator; but the offsets are not considered as committed until the transaction itself is successfully committed later (via
+ * the {@link #commitTransaction()} call).
+ *
* @throws IllegalStateException if no transactional.id has been configured, no transaction has been started
* @throws ProducerFencedException fatal error indicating another producer with the same transactional.id is active
* @throws org.apache.kafka.common.errors.UnsupportedVersionException fatal error indicating the broker
@@ -685,6 +690,7 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
* transactional.id is not authorized, or the consumer group id is not authorized.
* @throws org.apache.kafka.common.errors.InvalidProducerEpochException if the producer has attempted to produce with an old epoch
* to the partition leader. See the exception for more details
+ * @throws TimeoutException if the time taken for sending the offsets has surpassed <code>max.block.ms</code>.
* @throws KafkaException if the producer has encountered a previous fatal or abortable error, or for any
* other unexpected error
*
@@ -711,6 +717,11 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
* requires the brokers to be on version 2.5 or newer to understand.
*
* <p>
+ * This method is a blocking call that waits until the request has been received and acknowledged by the consumer group
+ * coordinator; but the offsets are not considered as committed until the transaction itself is successfully committed later (via
+ * the {@link #commitTransaction()} call).
+ *
+ * <p>
* Note, that the consumer should have {@code enable.auto.commit=false} and should
* also not commit offsets manually (via {@link KafkaConsumer#commitSync(Map) sync} or
* {@link KafkaConsumer#commitAsync(Map, OffsetCommitCallback) async} commits).
@@ -735,7 +746,7 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
* to the partition leader. See the exception for more details
* @throws KafkaException if the producer has encountered a previous fatal or abortable error, or for any
* other unexpected error
- * @throws TimeoutException if the time taken for sending offsets has surpassed max.block.ms.
+ * @throws TimeoutException if the time taken for sending the offsets has surpassed <code>max.block.ms</code>.
* @throws InterruptException if the thread is interrupted while blocked
*/
public void sendOffsetsToTransaction(Map<TopicPartition, OffsetAndMetadata> offsets,
@@ -765,7 +776,10 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
* Note that exceptions thrown by callbacks are ignored; the producer proceeds to commit the transaction in any case.
* <p>
* Note that this method will raise {@link TimeoutException} if the transaction cannot be committed before expiration
- * of {@code max.block.ms}. Additionally, it will raise {@link InterruptException} if interrupted.
+ * of {@code max.block.ms}, but this does not mean the request did not actually reach the broker. In fact, it only indicates
+ * that we cannot get the acknowledgement response in time, so it's up to the application's logic
+ * to decide how to handle time outs.
+ * Additionally, it will raise {@link InterruptException} if interrupted.
* It is safe to retry in either case, but it is not possible to attempt a different operation (such as abortTransaction)
* since the commit may already be in the progress of completing. If not retrying, the only option is to close the producer.
*
@@ -798,7 +812,9 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
* {@link ProducerFencedException} or an instance of {@link org.apache.kafka.common.errors.AuthorizationException}.
*
* Note that this method will raise {@link TimeoutException} if the transaction cannot be aborted before expiration
- * of {@code max.block.ms}. Additionally, it will raise {@link InterruptException} if interrupted.
+ * of {@code max.block.ms}, but this does not mean the request did not actually reach the broker. In fact, it only indicates
+ * that we cannot get the acknowledgement response in time, so it's up to the application's logic
+ * to decide how to handle time outs. Additionally, it will raise {@link InterruptException} if interrupted.
* It is safe to retry in either case, but it is not possible to attempt a different operation (such as commitTransaction)
* since the abort may already be in the progress of completing. If not retrying, the only option is to close the producer.
*