blob: 231e235cbc1d9ce7dd16816632a551c62b148ac8 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>KafkaProducer (kafka 2.7.0 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="KafkaProducer (kafka 2.7.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/kafka/clients/producer/MockProducer.html" title="class in org.apache.kafka.clients.producer"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/kafka/clients/producer/KafkaProducer.html" target="_top">Frames</a></li>
<li><a href="KafkaProducer.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.kafka.clients.producer</div>
<h2 title="Class KafkaProducer" class="title">Class KafkaProducer&lt;K,V&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.kafka.clients.producer.KafkaProducer&lt;K,V&gt;</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;K,V&gt;</dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">KafkaProducer&lt;K,V&gt;</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;K,V&gt;</pre>
<div class="block">A Kafka client that publishes records to the Kafka cluster.
<P>
The producer is <i>thread safe</i> and sharing a single producer instance across threads will generally be faster than
having multiple instances.
<p>
Here is a simple example of using the producer to send records with strings containing sequential numbers as the key/value
pairs.
<pre>
<code>
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("linger.ms", 1);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer&lt;String, String&gt; producer = new KafkaProducer&lt;&gt;(props);
for (int i = 0; i &lt; 100; i++)
producer.send(new ProducerRecord&lt;String, String&gt;("my-topic", Integer.toString(i), Integer.toString(i)));
producer.close();
</code></pre>
<p>
The producer consists of a pool of buffer space that holds records that haven't yet been transmitted to the server
as well as a background I/O thread that is responsible for turning these records into requests and transmitting them
to the cluster. Failure to close the producer after use will leak these resources.
<p>
The <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send()</code></a> method is asynchronous. When called it adds the record to a buffer of pending record sends
and immediately returns. This allows the producer to batch together individual records for efficiency.
<p>
The <code>acks</code> config controls the criteria under which requests are considered complete. The "all" setting
we have specified will result in blocking on the full commit of the record, the slowest but most durable setting.
<p>
If the request fails, the producer can automatically retry, though since we have specified <code>retries</code>
as 0 it won't. Enabling retries also opens up the possibility of duplicates (see the documentation on
<a href="http://kafka.apache.org/documentation.html#semantics">message delivery semantics</a> for details).
<p>
The producer maintains buffers of unsent records for each partition. These buffers are of a size specified by
the <code>batch.size</code> config. Making this larger can result in more batching, but requires more memory (since we will
generally have one of these buffers for each active partition).
<p>
By default a buffer is available to send immediately even if there is additional unused space in the buffer. However if you
want to reduce the number of requests you can set <code>linger.ms</code> to something greater than 0. This will
instruct the producer to wait up to that number of milliseconds before sending a request in hope that more records will
arrive to fill up the same batch. This is analogous to Nagle's algorithm in TCP. For example, in the code snippet above,
likely all 100 records would be sent in a single request since we set our linger time to 1 millisecond. However this setting
would add 1 millisecond of latency to our request waiting for more records to arrive if we didn't fill up the buffer. Note that
records that arrive close together in time will generally batch together even with <code>linger.ms=0</code> so under heavy load
batching will occur regardless of the linger configuration; however setting this to something larger than 0 can lead to fewer, more
efficient requests when not under maximal load at the cost of a small amount of latency.
<p>
The <code>buffer.memory</code> controls the total amount of memory available to the producer for buffering. If records
are sent faster than they can be transmitted to the server then this buffer space will be exhausted. When the buffer space is
exhausted additional send calls will block. The threshold for time to block is determined by <code>max.block.ms</code> after which it throws
a TimeoutException.
<p>
The <code>key.serializer</code> and <code>value.serializer</code> instruct how to turn the key and value objects the user provides with
their <code>ProducerRecord</code> into bytes. You can use the included <a href="../../../../../org/apache/kafka/common/serialization/ByteArraySerializer.html" title="class in org.apache.kafka.common.serialization"><code>ByteArraySerializer</code></a> or
<a href="../../../../../org/apache/kafka/common/serialization/StringSerializer.html" title="class in org.apache.kafka.common.serialization"><code>StringSerializer</code></a> for simple string or byte types.
<p>
From Kafka 0.11, the KafkaProducer supports two additional modes: the idempotent producer and the transactional producer.
The idempotent producer strengthens Kafka's delivery semantics from at least once to exactly once delivery. In particular
producer retries will no longer introduce duplicates. The transactional producer allows an application to send messages
to multiple partitions (and topics!) atomically.
</p>
<p>
To enable idempotence, the <code>enable.idempotence</code> configuration must be set to true. If set, the
<code>retries</code> config will default to <code>Integer.MAX_VALUE</code> and the <code>acks</code> config will
default to <code>all</code>. There are no API changes for the idempotent producer, so existing applications will
not need to be modified to take advantage of this feature.
</p>
<p>
To take advantage of the idempotent producer, it is imperative to avoid application level re-sends since these cannot
be de-duplicated. As such, if an application enables idempotence, it is recommended to leave the <code>retries</code>
config unset, as it will be defaulted to <code>Integer.MAX_VALUE</code>. Additionally, if a <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send(ProducerRecord)</code></a>
returns an error even with infinite retries (for instance if the message expires in the buffer before being sent),
then it is recommended to shut down the producer and check the contents of the last produced message to ensure that
it is not duplicated. Finally, the producer can only guarantee idempotence for messages sent within a single session.
</p>
<p>To use the transactional producer and the attendant APIs, you must set the <code>transactional.id</code>
configuration property. If the <code>transactional.id</code> is set, idempotence is automatically enabled along with
the producer configs which idempotence depends on. Further, topics which are included in transactions should be configured
for durability. In particular, the <code>replication.factor</code> should be at least <code>3</code>, and the
<code>min.insync.replicas</code> for these topics should be set to 2. Finally, in order for transactional guarantees
to be realized from end-to-end, the consumers must be configured to read only committed messages as well.
</p>
<p>
The purpose of the <code>transactional.id</code> is to enable transaction recovery across multiple sessions of a
single producer instance. It would typically be derived from the shard identifier in a partitioned, stateful, application.
As such, it should be unique to each producer instance running within a partitioned application.
</p>
<p>All the new transactional APIs are blocking and will throw exceptions on failure. The example
below illustrates how the new APIs are meant to be used. It is similar to the example above, except that all
100 messages are part of a single transaction.
</p>
<p>
<pre>
<code>
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("transactional.id", "my-transactional-id");
Producer&lt;String, String&gt; producer = new KafkaProducer&lt;&gt;(props, new StringSerializer(), new StringSerializer());
producer.initTransactions();
try {
producer.beginTransaction();
for (int i = 0; i &lt; 100; i++)
producer.send(new ProducerRecord&lt;&gt;("my-topic", Integer.toString(i), Integer.toString(i)));
producer.commitTransaction();
} catch (ProducerFencedException | OutOfOrderSequenceException | AuthorizationException e) {
// We can't recover from these exceptions, so our only option is to close the producer and exit.
producer.close();
} catch (KafkaException e) {
// For all other exceptions, just abort the transaction and try again.
producer.abortTransaction();
}
producer.close();
</code> </pre>
</p>
<p>
As is hinted at in the example, there can be only one open transaction per producer. All messages sent between the
<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#beginTransaction--"><code>beginTransaction()</code></a> and <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#commitTransaction--"><code>commitTransaction()</code></a> calls will be part of a single transaction. When the
<code>transactional.id</code> is specified, all messages sent by the producer must be part of a transaction.
</p>
<p>
The transactional producer uses exceptions to communicate error states. In particular, it is not required
to specify callbacks for <code>producer.send()</code> or to call <code>.get()</code> on the returned Future: a
<code>KafkaException</code> would be thrown if any of the
<code>producer.send()</code> or transactional calls hit an irrecoverable error during a transaction. See the <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send(ProducerRecord)</code></a>
documentation for more details about detecting errors from a transactional send.
</p>
</p>By calling
<code>producer.abortTransaction()</code> upon receiving a <code>KafkaException</code> we can ensure that any
successful writes are marked as aborted, hence keeping the transactional guarantees.
</p>
<p>
This client can communicate with brokers that are version 0.10.0 or newer. Older or newer brokers may not support
certain client features. For instance, the transactional APIs need broker versions 0.11.0 or later. You will receive an
<code>UnsupportedVersionException</code> when invoking an API that is not available in the running broker version.
</p></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#NETWORK_THREAD_PREFIX">NETWORK_THREAD_PREFIX</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#PRODUCER_METRIC_GROUP_NAME">PRODUCER_METRIC_GROUP_NAME</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#KafkaProducer-java.util.Map-">KafkaProducer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;configs)</code>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#KafkaProducer-java.util.Map-org.apache.kafka.common.serialization.Serializer-org.apache.kafka.common.serialization.Serializer-">KafkaProducer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;configs,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>&gt;&nbsp;keySerializer,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;valueSerializer)</code>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration, a key and a value <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#KafkaProducer-java.util.Properties-">KafkaProducer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</a>&nbsp;properties)</code>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#KafkaProducer-java.util.Properties-org.apache.kafka.common.serialization.Serializer-org.apache.kafka.common.serialization.Serializer-">KafkaProducer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</a>&nbsp;properties,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>&gt;&nbsp;keySerializer,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;valueSerializer)</code>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration, a key and a value <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#abortTransaction--">abortTransaction</a></span>()</code>
<div class="block">Aborts the ongoing transaction.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#beginTransaction--">beginTransaction</a></span>()</code>
<div class="block">Should be called before the start of each new transaction.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close--">close</a></span>()</code>
<div class="block">Close this producer.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close-java.time.Duration-">close</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html?is-external=true" title="class or interface in java.time">Duration</a>&nbsp;timeout)</code>
<div class="block">This method waits up to <code>timeout</code> for the producer to complete the sending of all incomplete requests.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#commitTransaction--">commitTransaction</a></span>()</code>
<div class="block">Commits the ongoing transaction.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#flush--">flush</a></span>()</code>
<div class="block">Invoking this method makes all buffered records immediately available to send (even if <code>linger.ms</code> is
greater than 0) and blocks on the completion of the requests associated with these records.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#initTransactions--">initTransactions</a></span>()</code>
<div class="block">Needs to be called before any other methods when the transactional.id is set in the configuration.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/kafka/common/MetricName.html" title="class in org.apache.kafka.common">MetricName</a>,? extends <a href="../../../../../org/apache/kafka/common/Metric.html" title="interface in org.apache.kafka.common">Metric</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#metrics--">metrics</a></span>()</code>
<div class="block">Get the full set of internal metrics maintained by the producer.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/kafka/common/PartitionInfo.html" title="class in org.apache.kafka.common">PartitionInfo</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#partitionsFor-java.lang.String-">partitionsFor</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;topic)</code>
<div class="block">Get the partition metadata for the given topic.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/RecordMetadata.html" title="class in org.apache.kafka.clients.producer">RecordMetadata</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-">send</a></span>(<a href="../../../../../org/apache/kafka/clients/producer/ProducerRecord.html" title="class in org.apache.kafka.clients.producer">ProducerRecord</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;record)</code>
<div class="block">Asynchronously send a record to a topic.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/RecordMetadata.html" title="class in org.apache.kafka.clients.producer">RecordMetadata</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-org.apache.kafka.clients.producer.Callback-">send</a></span>(<a href="../../../../../org/apache/kafka/clients/producer/ProducerRecord.html" title="class in org.apache.kafka.clients.producer">ProducerRecord</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;record,
<a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer">Callback</a>&nbsp;callback)</code>
<div class="block">Asynchronously send a record to a topic and invoke the provided callback when the send has been acknowledged.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#sendOffsetsToTransaction-java.util.Map-org.apache.kafka.clients.consumer.ConsumerGroupMetadata-">sendOffsetsToTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/kafka/common/TopicPartition.html" title="class in org.apache.kafka.common">TopicPartition</a>,<a href="../../../../../org/apache/kafka/clients/consumer/OffsetAndMetadata.html" title="class in org.apache.kafka.clients.consumer">OffsetAndMetadata</a>&gt;&nbsp;offsets,
<a href="../../../../../org/apache/kafka/clients/consumer/ConsumerGroupMetadata.html" title="class in org.apache.kafka.clients.consumer">ConsumerGroupMetadata</a>&nbsp;groupMetadata)</code>
<div class="block">Sends a list of specified offsets to the consumer group coordinator, and also marks
those offsets as part of the current transaction.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#sendOffsetsToTransaction-java.util.Map-java.lang.String-">sendOffsetsToTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/kafka/common/TopicPartition.html" title="class in org.apache.kafka.common">TopicPartition</a>,<a href="../../../../../org/apache/kafka/clients/consumer/OffsetAndMetadata.html" title="class in org.apache.kafka.clients.consumer">OffsetAndMetadata</a>&gt;&nbsp;offsets,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;consumerGroupId)</code>
<div class="block">Sends a list of specified offsets to the consumer group coordinator, and also marks
those offsets as part of the current transaction.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.kafka.clients.producer.Producer">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.kafka.clients.producer.<a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a></h3>
<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#close-long-java.util.concurrent.TimeUnit-">close</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="NETWORK_THREAD_PREFIX">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>NETWORK_THREAD_PREFIX</h4>
<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> NETWORK_THREAD_PREFIX</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.kafka.clients.producer.KafkaProducer.NETWORK_THREAD_PREFIX">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="PRODUCER_METRIC_GROUP_NAME">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>PRODUCER_METRIC_GROUP_NAME</h4>
<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> PRODUCER_METRIC_GROUP_NAME</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.kafka.clients.producer.KafkaProducer.PRODUCER_METRIC_GROUP_NAME">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="KafkaProducer-java.util.Map-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>KafkaProducer</h4>
<pre>public&nbsp;KafkaProducer(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;configs)</pre>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration. Valid configuration strings
are documented <a href="http://kafka.apache.org/documentation.html#producerconfigs">here</a>. Values can be
either strings or Objects of the appropriate type (for example a numeric configuration would accept either the
string "42" or the integer 42).
<p>
Note: after creating a <code>KafkaProducer</code> you must always <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close--"><code>close()</code></a> it to avoid resource leaks.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>configs</code> - The producer configs</dd>
</dl>
</li>
</ul>
<a name="KafkaProducer-java.util.Map-org.apache.kafka.common.serialization.Serializer-org.apache.kafka.common.serialization.Serializer-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>KafkaProducer</h4>
<pre>public&nbsp;KafkaProducer(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;configs,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>&gt;&nbsp;keySerializer,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;valueSerializer)</pre>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration, a key and a value <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>.
Valid configuration strings are documented <a href="http://kafka.apache.org/documentation.html#producerconfigs">here</a>.
Values can be either strings or Objects of the appropriate type (for example a numeric configuration would accept
either the string "42" or the integer 42).
<p>
Note: after creating a <code>KafkaProducer</code> you must always <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close--"><code>close()</code></a> it to avoid resource leaks.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>configs</code> - The producer configs</dd>
<dd><code>keySerializer</code> - The serializer for key that implements <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>. The configure() method won't be
called in the producer when the serializer is passed in directly.</dd>
<dd><code>valueSerializer</code> - The serializer for value that implements <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>. The configure() method won't
be called in the producer when the serializer is passed in directly.</dd>
</dl>
</li>
</ul>
<a name="KafkaProducer-java.util.Properties-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>KafkaProducer</h4>
<pre>public&nbsp;KafkaProducer(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</a>&nbsp;properties)</pre>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration. Valid configuration strings
are documented <a href="http://kafka.apache.org/documentation.html#producerconfigs">here</a>.
<p>
Note: after creating a <code>KafkaProducer</code> you must always <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close--"><code>close()</code></a> it to avoid resource leaks.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>properties</code> - The producer configs</dd>
</dl>
</li>
</ul>
<a name="KafkaProducer-java.util.Properties-org.apache.kafka.common.serialization.Serializer-org.apache.kafka.common.serialization.Serializer-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>KafkaProducer</h4>
<pre>public&nbsp;KafkaProducer(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</a>&nbsp;properties,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>&gt;&nbsp;keySerializer,
<a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization">Serializer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;valueSerializer)</pre>
<div class="block">A producer is instantiated by providing a set of key-value pairs as configuration, a key and a value <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>.
Valid configuration strings are documented <a href="http://kafka.apache.org/documentation.html#producerconfigs">here</a>.
<p>
Note: after creating a <code>KafkaProducer</code> you must always <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close--"><code>close()</code></a> it to avoid resource leaks.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>properties</code> - The producer configs</dd>
<dd><code>keySerializer</code> - The serializer for key that implements <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>. The configure() method won't be
called in the producer when the serializer is passed in directly.</dd>
<dd><code>valueSerializer</code> - The serializer for value that implements <a href="../../../../../org/apache/kafka/common/serialization/Serializer.html" title="interface in org.apache.kafka.common.serialization"><code>Serializer</code></a>. The configure() method won't
be called in the producer when the serializer is passed in directly.</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="initTransactions--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>initTransactions</h4>
<pre>public&nbsp;void&nbsp;initTransactions()</pre>
<div class="block">Needs to be called before any other methods when the transactional.id is set in the configuration.
This method does the following:
1. Ensures any transactions initiated by previous instances of the producer with the same
transactional.id are completed. If the previous instance had failed with a transaction in
progress, it will be aborted. If the last transaction had begun completion,
but not yet finished, this method awaits its completion.
2. Gets the internal producer id and epoch, used in all future transactional
messages issued by the producer.
Note that this method will raise <a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors"><code>TimeoutException</code></a> if the transactional state cannot
be initialized before expiration of <code>max.block.ms</code>. Additionally, it will raise <a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors"><code>InterruptException</code></a>
if interrupted. It is safe to retry in either case, but once the transactional state has been successfully
initialized, this method should no longer be used.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#initTransactions--">initTransactions</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no transactional.id has been configured</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors">UnsupportedVersionException</a></code> - fatal error indicating the broker
does not support transactions (i.e. if its version is lower than 0.11.0.0)</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the configured
transactional.id is not authorized. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - if the producer has encountered a previous fatal error or for any other unexpected error</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors">TimeoutException</a></code> - if the time taken for initialize the transaction has surpassed <code>max.block.ms</code>.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - if the thread is interrupted while blocked</dd>
</dl>
</li>
</ul>
<a name="beginTransaction--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>beginTransaction</h4>
<pre>public&nbsp;void&nbsp;beginTransaction()
throws <a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></pre>
<div class="block">Should be called before the start of each new transaction. Note that prior to the first invocation
of this method, you must invoke <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#initTransactions--"><code>initTransactions()</code></a> exactly one time.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#beginTransaction--">beginTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no transactional.id has been configured or if <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#initTransactions--"><code>initTransactions()</code></a>
has not yet been invoked</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></code> - if another producer with the same transactional.id is active</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InvalidProducerEpochException.html" title="class in org.apache.kafka.common.errors">InvalidProducerEpochException</a></code> - if the producer has attempted to produce with an old epoch
to the partition leader. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors">UnsupportedVersionException</a></code> - fatal error indicating the broker
does not support transactions (i.e. if its version is lower than 0.11.0.0)</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the configured
transactional.id is not authorized. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - if the producer has encountered a previous fatal error or for any other unexpected error</dd>
</dl>
</li>
</ul>
<a name="sendOffsetsToTransaction-java.util.Map-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>sendOffsetsToTransaction</h4>
<pre>public&nbsp;void&nbsp;sendOffsetsToTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/kafka/common/TopicPartition.html" title="class in org.apache.kafka.common">TopicPartition</a>,<a href="../../../../../org/apache/kafka/clients/consumer/OffsetAndMetadata.html" title="class in org.apache.kafka.clients.consumer">OffsetAndMetadata</a>&gt;&nbsp;offsets,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;consumerGroupId)
throws <a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></pre>
<div class="block">Sends a list of specified offsets to the consumer group coordinator, and also marks
those offsets as part of the current transaction. These offsets will be considered
committed only if the transaction is committed successfully. The committed offset should
be the next message your application will consume, i.e. lastProcessedMessageOffset + 1.
<p>
This method should be used when you need to batch consumed and produced messages
together, typically in a consume-transform-produce pattern. Thus, the specified
<code>consumerGroupId</code> should be the same as config parameter <code>group.id</code> of the used
<a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html" title="class in org.apache.kafka.clients.consumer"><code>consumer</code></a>. Note, that the consumer should have <code>enable.auto.commit=false</code>
and should also not commit offsets manually (via <a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html#commitSync-java.util.Map-"><code>sync</code></a> or
<a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html#commitAsync-java.util.Map-org.apache.kafka.clients.consumer.OffsetCommitCallback-"><code>async</code></a> commits).</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#sendOffsetsToTransaction-java.util.Map-java.lang.String-">sendOffsetsToTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no transactional.id has been configured, no transaction has been started</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></code> - fatal error indicating another producer with the same transactional.id is active</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors">UnsupportedVersionException</a></code> - fatal error indicating the broker
does not support transactions (i.e. if its version is lower than 0.11.0.0)</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedForMessageFormatException.html" title="class in org.apache.kafka.common.errors">UnsupportedForMessageFormatException</a></code> - fatal error indicating the message
format used for the offsets topic on the broker does not support transactions</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the configured
transactional.id is not authorized, or the consumer group id is not authorized.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InvalidProducerEpochException.html" title="class in org.apache.kafka.common.errors">InvalidProducerEpochException</a></code> - if the producer has attempted to produce with an old epoch
to the partition leader. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - if the producer has encountered a previous fatal or abortable error, or for any
other unexpected error</dd>
</dl>
</li>
</ul>
<a name="sendOffsetsToTransaction-java.util.Map-org.apache.kafka.clients.consumer.ConsumerGroupMetadata-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>sendOffsetsToTransaction</h4>
<pre>public&nbsp;void&nbsp;sendOffsetsToTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/kafka/common/TopicPartition.html" title="class in org.apache.kafka.common">TopicPartition</a>,<a href="../../../../../org/apache/kafka/clients/consumer/OffsetAndMetadata.html" title="class in org.apache.kafka.clients.consumer">OffsetAndMetadata</a>&gt;&nbsp;offsets,
<a href="../../../../../org/apache/kafka/clients/consumer/ConsumerGroupMetadata.html" title="class in org.apache.kafka.clients.consumer">ConsumerGroupMetadata</a>&nbsp;groupMetadata)
throws <a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></pre>
<div class="block">Sends a list of specified offsets to the consumer group coordinator, and also marks
those offsets as part of the current transaction. These offsets will be considered
committed only if the transaction is committed successfully. The committed offset should
be the next message your application will consume, i.e. lastProcessedMessageOffset + 1.
<p>
This method should be used when you need to batch consumed and produced messages
together, typically in a consume-transform-produce pattern. Thus, the specified
<code>groupMetadata</code> should be extracted from the used <a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html" title="class in org.apache.kafka.clients.consumer"><code>consumer</code></a> via
<a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html#groupMetadata--"><code>KafkaConsumer.groupMetadata()</code></a> to leverage consumer group metadata for stronger fencing than
<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#sendOffsetsToTransaction-java.util.Map-java.lang.String-"><code>sendOffsetsToTransaction(Map, String)</code></a> which only sends with consumer group id.
<p>
Note, that the consumer should have <code>enable.auto.commit=false</code> and should
also not commit offsets manually (via <a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html#commitSync-java.util.Map-"><code>sync</code></a> or
<a href="../../../../../org/apache/kafka/clients/consumer/KafkaConsumer.html#commitAsync-java.util.Map-org.apache.kafka.clients.consumer.OffsetCommitCallback-"><code>async</code></a> commits).
This method will raise <a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors"><code>TimeoutException</code></a> if the producer cannot send offsets before expiration of <code>max.block.ms</code>.
Additionally, it will raise <a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors"><code>InterruptException</code></a> if interrupted.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#sendOffsetsToTransaction-java.util.Map-org.apache.kafka.clients.consumer.ConsumerGroupMetadata-">sendOffsetsToTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no transactional.id has been configured or no transaction has been started.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></code> - fatal error indicating another producer with the same transactional.id is active</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors">UnsupportedVersionException</a></code> - fatal error indicating the broker
does not support transactions (i.e. if its version is lower than 0.11.0.0) or
the broker doesn't support latest version of transactional API with consumer group metadata (i.e. if its version is
lower than 2.5.0).</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedForMessageFormatException.html" title="class in org.apache.kafka.common.errors">UnsupportedForMessageFormatException</a></code> - fatal error indicating the message
format used for the offsets topic on the broker does not support transactions</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the configured
transactional.id is not authorized, or the consumer group id is not authorized.</dd>
<dd><code><a href="../../../../../org/apache/kafka/clients/consumer/CommitFailedException.html" title="class in org.apache.kafka.clients.consumer">CommitFailedException</a></code> - if the commit failed and cannot be retried
(e.g. if the consumer has been kicked out of the group). Users should handle this by aborting the transaction.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/FencedInstanceIdException.html" title="class in org.apache.kafka.common.errors">FencedInstanceIdException</a></code> - if this producer instance gets fenced by broker due to a
mis-configured consumer instance id within group metadata.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InvalidProducerEpochException.html" title="class in org.apache.kafka.common.errors">InvalidProducerEpochException</a></code> - if the producer has attempted to produce with an old epoch
to the partition leader. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - if the producer has encountered a previous fatal or abortable error, or for any
other unexpected error</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors">TimeoutException</a></code> - if the time taken for sending offsets has surpassed max.block.ms.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - if the thread is interrupted while blocked</dd>
</dl>
</li>
</ul>
<a name="commitTransaction--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>commitTransaction</h4>
<pre>public&nbsp;void&nbsp;commitTransaction()
throws <a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></pre>
<div class="block">Commits the ongoing transaction. This method will flush any unsent records before actually committing the transaction.
Further, if any of the <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send(ProducerRecord)</code></a> calls which were part of the transaction hit irrecoverable
errors, this method will throw the last received exception immediately and the transaction will not be committed.
So all <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send(ProducerRecord)</code></a> calls in a transaction must succeed in order for this method to succeed.
Note that this method will raise <a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors"><code>TimeoutException</code></a> if the transaction cannot be committed before expiration
of <code>max.block.ms</code>. Additionally, it will raise <a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors"><code>InterruptException</code></a> 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.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#commitTransaction--">commitTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no transactional.id has been configured or no transaction has been started</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></code> - fatal error indicating another producer with the same transactional.id is active</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors">UnsupportedVersionException</a></code> - fatal error indicating the broker
does not support transactions (i.e. if its version is lower than 0.11.0.0)</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the configured
transactional.id is not authorized. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InvalidProducerEpochException.html" title="class in org.apache.kafka.common.errors">InvalidProducerEpochException</a></code> - if the producer has attempted to produce with an old epoch
to the partition leader. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - if the producer has encountered a previous fatal or abortable error, or for any
other unexpected error</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors">TimeoutException</a></code> - if the time taken for committing the transaction has surpassed <code>max.block.ms</code>.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - if the thread is interrupted while blocked</dd>
</dl>
</li>
</ul>
<a name="abortTransaction--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>abortTransaction</h4>
<pre>public&nbsp;void&nbsp;abortTransaction()
throws <a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></pre>
<div class="block">Aborts the ongoing transaction. Any unflushed produce messages will be aborted when this call is made.
This call will throw an exception immediately if any prior <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send(ProducerRecord)</code></a> calls failed with a
<a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors"><code>ProducerFencedException</code></a> or an instance of <a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors"><code>AuthorizationException</code></a>.
Note that this method will raise <a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors"><code>TimeoutException</code></a> if the transaction cannot be aborted before expiration
of <code>max.block.ms</code>. Additionally, it will raise <a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors"><code>InterruptException</code></a> 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.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#abortTransaction--">abortTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no transactional.id has been configured or no transaction has been started</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors">ProducerFencedException</a></code> - fatal error indicating another producer with the same transactional.id is active</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InvalidProducerEpochException.html" title="class in org.apache.kafka.common.errors">InvalidProducerEpochException</a></code> - if the producer has attempted to produce with an old epoch
to the partition leader. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors">UnsupportedVersionException</a></code> - fatal error indicating the broker
does not support transactions (i.e. if its version is lower than 0.11.0.0)</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the configured
transactional.id is not authorized. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - if the producer has encountered a previous fatal error or for any other unexpected error</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors">TimeoutException</a></code> - if the time taken for aborting the transaction has surpassed <code>max.block.ms</code>.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - if the thread is interrupted while blocked</dd>
</dl>
</li>
</ul>
<a name="send-org.apache.kafka.clients.producer.ProducerRecord-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>send</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/RecordMetadata.html" title="class in org.apache.kafka.clients.producer">RecordMetadata</a>&gt;&nbsp;send(<a href="../../../../../org/apache/kafka/clients/producer/ProducerRecord.html" title="class in org.apache.kafka.clients.producer">ProducerRecord</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;record)</pre>
<div class="block">Asynchronously send a record to a topic. Equivalent to <code>send(record, null)</code>.
See <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-org.apache.kafka.clients.producer.Callback-"><code>send(ProducerRecord, Callback)</code></a> for details.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#send-org.apache.kafka.clients.producer.ProducerRecord-">send</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
</dl>
</li>
</ul>
<a name="send-org.apache.kafka.clients.producer.ProducerRecord-org.apache.kafka.clients.producer.Callback-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>send</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/RecordMetadata.html" title="class in org.apache.kafka.clients.producer">RecordMetadata</a>&gt;&nbsp;send(<a href="../../../../../org/apache/kafka/clients/producer/ProducerRecord.html" title="class in org.apache.kafka.clients.producer">ProducerRecord</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;&nbsp;record,
<a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer">Callback</a>&nbsp;callback)</pre>
<div class="block">Asynchronously send a record to a topic and invoke the provided callback when the send has been acknowledged.
<p>
The send is asynchronous and this method will return immediately once the record has been stored in the buffer of
records waiting to be sent. This allows sending many records in parallel without blocking to wait for the
response after each one.
<p>
The result of the send is a <a href="../../../../../org/apache/kafka/clients/producer/RecordMetadata.html" title="class in org.apache.kafka.clients.producer"><code>RecordMetadata</code></a> specifying the partition the record was sent to, the offset
it was assigned and the timestamp of the record. If
<code>CreateTime</code> is used by the topic, the timestamp
will be the user provided timestamp or the record send time if the user did not specify a timestamp for the
record. If <code>LogAppendTime</code> is used for the
topic, the timestamp will be the Kafka broker local time when the message is appended.
<p>
Since the send call is asynchronous it returns a <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><code>Future</code></a> for the
<a href="../../../../../org/apache/kafka/clients/producer/RecordMetadata.html" title="class in org.apache.kafka.clients.producer"><code>RecordMetadata</code></a> that will be assigned to this record. Invoking <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true#get--" title="class or interface in java.util.concurrent"><code>get()</code></a> on this future will block until the associated request completes and then return the metadata for the record
or throw any exception that occurred while sending the record.
<p>
If you want to simulate a simple blocking call you can call the <code>get()</code> method immediately:
<pre>
<code>
byte[] key = "key".getBytes();
byte[] value = "value".getBytes();
ProducerRecord&lt;byte[],byte[]&gt; record = new ProducerRecord&lt;byte[],byte[]&gt;("my-topic", key, value)
producer.send(record).get();
</code></pre>
<p>
Fully non-blocking usage can make use of the <a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer"><code>Callback</code></a> parameter to provide a callback that
will be invoked when the request is complete.
<pre>
<code>
ProducerRecord&lt;byte[],byte[]&gt; record = new ProducerRecord&lt;byte[],byte[]&gt;("the-topic", key, value);
producer.send(myRecord,
new Callback() {
public void onCompletion(RecordMetadata metadata, Exception e) {
if(e != null) {
e.printStackTrace();
} else {
System.out.println("The offset of the record we just sent is: " + metadata.offset());
}
}
});
</code>
</pre>
Callbacks for records being sent to the same partition are guaranteed to execute in order. That is, in the
following example <code>callback1</code> is guaranteed to execute before <code>callback2</code>:
<pre>
<code>
producer.send(new ProducerRecord&lt;byte[],byte[]&gt;(topic, partition, key1, value1), callback1);
producer.send(new ProducerRecord&lt;byte[],byte[]&gt;(topic, partition, key2, value2), callback2);
</code>
</pre>
<p>
When used as part of a transaction, it is not necessary to define a callback or check the result of the future
in order to detect errors from <code>send</code>. If any of the send calls failed with an irrecoverable error,
the final <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#commitTransaction--"><code>commitTransaction()</code></a> call will fail and throw the exception from the last failed send. When
this happens, your application should call <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#abortTransaction--"><code>abortTransaction()</code></a> to reset the state and continue to send
data.
</p>
<p>
Some transactional send errors cannot be resolved with a call to <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#abortTransaction--"><code>abortTransaction()</code></a>. In particular,
if a transactional send finishes with a <a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors"><code>ProducerFencedException</code></a>, a <a href="../../../../../org/apache/kafka/common/errors/OutOfOrderSequenceException.html" title="class in org.apache.kafka.common.errors"><code>OutOfOrderSequenceException</code></a>,
a <a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors"><code>UnsupportedVersionException</code></a>, or an
<a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors"><code>AuthorizationException</code></a>, then the only option left is to call <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#close--"><code>close()</code></a>.
Fatal errors cause the producer to enter a defunct state in which future API calls will continue to raise
the same underyling error wrapped in a new <a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common"><code>KafkaException</code></a>.
</p>
<p>
It is a similar picture when idempotence is enabled, but no <code>transactional.id</code> has been configured.
In this case, <a href="../../../../../org/apache/kafka/common/errors/UnsupportedVersionException.html" title="class in org.apache.kafka.common.errors"><code>UnsupportedVersionException</code></a> and
<a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors"><code>AuthorizationException</code></a> are considered fatal errors. However,
<a href="../../../../../org/apache/kafka/common/errors/ProducerFencedException.html" title="class in org.apache.kafka.common.errors"><code>ProducerFencedException</code></a> does not need to be handled. Additionally, it is possible to continue
sending after receiving an <a href="../../../../../org/apache/kafka/common/errors/OutOfOrderSequenceException.html" title="class in org.apache.kafka.common.errors"><code>OutOfOrderSequenceException</code></a>, but doing so
can result in out of order delivery of pending messages. To ensure proper ordering, you should close the
producer and create a new instance.
</p>
<p>
If the message format of the destination topic is not upgraded to 0.11.0.0, idempotent and transactional
produce requests will fail with an <a href="../../../../../org/apache/kafka/common/errors/UnsupportedForMessageFormatException.html" title="class in org.apache.kafka.common.errors"><code>UnsupportedForMessageFormatException</code></a>
error. If this is encountered during a transaction, it is possible to abort and continue. But note that future
sends to the same topic will continue receiving the same exception until the topic is upgraded.
</p>
<p>
Note that callbacks will generally execute in the I/O thread of the producer and so should be reasonably fast or
they will delay the sending of messages from other threads. If you want to execute blocking or computationally
expensive callbacks it is recommended to use your own <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><code>Executor</code></a> in the callback body
to parallelize processing.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#send-org.apache.kafka.clients.producer.ProducerRecord-org.apache.kafka.clients.producer.Callback-">send</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>record</code> - The record to send</dd>
<dd><code>callback</code> - A user-supplied callback to execute when the record has been acknowledged by the server (null
indicates no callback)</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthenticationException.html" title="class in org.apache.kafka.common.errors">AuthenticationException</a></code> - if authentication fails. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - fatal error indicating that the producer is not allowed to write</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if a transactional.id has been configured and no transaction has been started, or
when send is invoked after producer has been closed.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - If the thread is interrupted while blocked</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/SerializationException.html" title="class in org.apache.kafka.common.errors">SerializationException</a></code> - If the key or value are not valid objects given the configured serializers</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - If a Kafka related error occurs that does not belong to the public API exceptions.</dd>
</dl>
</li>
</ul>
<a name="flush--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>flush</h4>
<pre>public&nbsp;void&nbsp;flush()</pre>
<div class="block">Invoking this method makes all buffered records immediately available to send (even if <code>linger.ms</code> is
greater than 0) and blocks on the completion of the requests associated with these records. The post-condition
of <code>flush()</code> is that any previously sent record will have completed (e.g. <code>Future.isDone() == true</code>).
A request is considered completed when it is successfully acknowledged
according to the <code>acks</code> configuration you have specified or else it results in an error.
<p>
Other threads can continue sending records while one thread is blocked waiting for a flush call to complete,
however no guarantee is made about the completion of records sent after the flush call begins.
<p>
This method can be useful when consuming from some input system and producing into Kafka. The <code>flush()</code> call
gives a convenient way to ensure all previously sent messages have actually completed.
<p>
This example shows how to consume from one Kafka topic and produce to another Kafka topic:
<pre>
<code>
for(ConsumerRecord&lt;String, String&gt; record: consumer.poll(100))
producer.send(new ProducerRecord("my-topic", record.key(), record.value());
producer.flush();
consumer.commit();
</code>
</pre>
Note that the above example may drop records if the produce request fails. If we want to ensure that this does not occur
we need to set <code>retries=&lt;large_number&gt;</code> in our config.
</p>
<p>
Applications don't need to call this method for transactional producers, since the <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#commitTransaction--"><code>commitTransaction()</code></a> will
flush all buffered records before performing the commit. This ensures that all the <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#send-org.apache.kafka.clients.producer.ProducerRecord-"><code>send(ProducerRecord)</code></a>
calls made since the previous <a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html#beginTransaction--"><code>beginTransaction()</code></a> are completed before the commit.
</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#flush--">flush</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - If the thread is interrupted while blocked</dd>
</dl>
</li>
</ul>
<a name="partitionsFor-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>partitionsFor</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/kafka/common/PartitionInfo.html" title="class in org.apache.kafka.common">PartitionInfo</a>&gt;&nbsp;partitionsFor(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;topic)</pre>
<div class="block">Get the partition metadata for the given topic. This can be used for custom partitioning.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#partitionsFor-java.lang.String-">partitionsFor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthenticationException.html" title="class in org.apache.kafka.common.errors">AuthenticationException</a></code> - if authentication fails. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/AuthorizationException.html" title="class in org.apache.kafka.common.errors">AuthorizationException</a></code> - if not authorized to the specified topic. See the exception for more details</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - if the thread is interrupted while blocked</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/TimeoutException.html" title="class in org.apache.kafka.common.errors">TimeoutException</a></code> - if metadata could not be refreshed within <code>max.block.ms</code></dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - for all Kafka-related exceptions, including the case where this method is called after producer close</dd>
</dl>
</li>
</ul>
<a name="metrics--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>metrics</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/kafka/common/MetricName.html" title="class in org.apache.kafka.common">MetricName</a>,? extends <a href="../../../../../org/apache/kafka/common/Metric.html" title="interface in org.apache.kafka.common">Metric</a>&gt;&nbsp;metrics()</pre>
<div class="block">Get the full set of internal metrics maintained by the producer.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#metrics--">metrics</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
</dl>
</li>
</ul>
<a name="close--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
<pre>public&nbsp;void&nbsp;close()</pre>
<div class="block">Close this producer. This method blocks until all previously sent requests complete.
This method is equivalent to <code>close(Long.MAX_VALUE, TimeUnit.MILLISECONDS)</code>.
<p>
<strong>If close() is called from <a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer"><code>Callback</code></a>, a warning message will be logged and close(0, TimeUnit.MILLISECONDS)
will be called instead. We do this because the sender thread would otherwise try to join itself and
block forever.</strong>
<p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#close--">close</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - If the thread is interrupted while blocked.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - If a unexpected error occurs while trying to close the client, this error should be treated
as fatal and indicate the client is no longer functionable.</dd>
</dl>
</li>
</ul>
<a name="close-java.time.Duration-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>close</h4>
<pre>public&nbsp;void&nbsp;close(<a href="https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html?is-external=true" title="class or interface in java.time">Duration</a>&nbsp;timeout)</pre>
<div class="block">This method waits up to <code>timeout</code> for the producer to complete the sending of all incomplete requests.
<p>
If the producer is unable to complete all requests before the timeout expires, this method will fail
any unsent and unacknowledged records immediately. It will also abort the ongoing transaction if it's not
already completing.
<p>
If invoked from within a <a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer"><code>Callback</code></a> this method will not block and will be equivalent to
<code>close(Duration.ofMillis(0))</code>. This is done since no further sending will happen while
blocking the I/O thread of the producer.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html#close-java.time.Duration-">close</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/kafka/clients/producer/Producer.html" title="interface in org.apache.kafka.clients.producer">Producer</a>&lt;<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">K</a>,<a href="../../../../../org/apache/kafka/clients/producer/KafkaProducer.html" title="type parameter in KafkaProducer">V</a>&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>timeout</code> - The maximum time to wait for producer to complete any pending requests. The value should be
non-negative. Specifying a timeout of zero means do not wait for pending send requests to complete.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/kafka/common/errors/InterruptException.html" title="class in org.apache.kafka.common.errors">InterruptException</a></code> - If the thread is interrupted while blocked.</dd>
<dd><code><a href="../../../../../org/apache/kafka/common/KafkaException.html" title="class in org.apache.kafka.common">KafkaException</a></code> - If a unexpected error occurs while trying to close the client, this error should be treated
as fatal and indicate the client is no longer functionable.</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - If the <code>timeout</code> is negative.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/kafka/clients/producer/Callback.html" title="interface in org.apache.kafka.clients.producer"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/kafka/clients/producer/MockProducer.html" title="class in org.apache.kafka.clients.producer"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/kafka/clients/producer/KafkaProducer.html" target="_top">Frames</a></li>
<li><a href="KafkaProducer.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>