diff --git a/docs/structured-streaming-kafka-integration.md b/docs/structured-streaming-kafka-integration.md
index e939e83449b2..0820b38a863c 100644
--- a/docs/structured-streaming-kafka-integration.md
+++ b/docs/structured-streaming-kafka-integration.md
@@ -539,7 +539,7 @@ The following properties are available to configure the consumer pool:
| spark.kafka.consumer.cache.evictorThreadRunInterval |
The interval of time between runs of the idle evictor thread for consumer pool. When non-positive, no idle evictor thread will be run. |
- 1m (1 minutes) |
+ 1m (1 minute) |
| spark.kafka.consumer.cache.jmx.enable |
@@ -580,7 +580,7 @@ The following properties are available to configure the fetched data pool:
| spark.kafka.consumer.fetchedData.cache.evictorThreadRunInterval |
The interval of time between runs of the idle evictor thread for fetched data pool. When non-positive, no idle evictor thread will be run. |
- 1m (1 minutes) |
+ 1m (1 minute) |
@@ -802,6 +802,34 @@ df.selectExpr("topic", "CAST(key AS STRING)", "CAST(value AS STRING)") \
+### Producer Caching
+
+Given Kafka producer instance is designed to be thread-safe, Spark initializes a Kafka producer instance and co-use across tasks for same caching key.
+
+The caching key is built up from the following information:
+
+* Kafka producer configuration
+
+This includes configuration for authorization, which Spark will automatically include when delegation token is being used. Even we take authorization into account, you can expect same Kafka producer instance will be used among same Kafka producer configuration.
+It will use different Kafka producer when delegation token is renewed; Kafka producer instance for old delegation token will be evicted according to the cache policy.
+
+The following properties are available to configure the producer pool:
+
+
+| Property Name | Default | Meaning |
+
+ | spark.kafka.producer.cache.timeout |
+ The minimum amount of time a producer may sit idle in the pool before it is eligible for eviction by the evictor. |
+ 10m (10 minutes) |
+
+
+ | spark.kafka.producer.cache.evictorThreadRunInterval |
+ The interval of time between runs of the idle evictor thread for producer pool. When non-positive, no idle evictor thread will be run. |
+ 1m (1 minute) |
+
+
+
+Idle eviction thread periodically removes producers which are not used longer than given timeout. Note that the producer is shared and used concurrently, so the last used timestamp is determined by the moment the producer instance is returned and reference count is 0.
## Kafka Specific Configurations