[
https://issues.apache.org/jira/browse/KAFKA-2135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ewen Cheslack-Postava resolved KAFKA-2135.
------------------------------------------
Resolution: Duplicate
> New Kafka Producer Client: Send requests wait indefinitely if no broker is
> available.
> -------------------------------------------------------------------------------------
>
> Key: KAFKA-2135
> URL: https://issues.apache.org/jira/browse/KAFKA-2135
> Project: Kafka
> Issue Type: Bug
> Components: producer
> Affects Versions: 0.8.2.0
> Reporter: David Hay
> Assignee: Jun Rao
> Priority: Critical
>
> I'm seeing issues when sending a message with the new producer client API.
> The future returned from Producer.send() will block indefinitely if the
> cluster is unreachable for some reason. Here are the steps:
> # Start up a single node kafka cluster locally.
> # Start up application and create a KafkaProducer with the following config:
> {noformat}
> KafkaProducerWrapper values:
> compression.type = snappy
> metric.reporters = []
> metadata.max.age.ms = 300000
> metadata.fetch.timeout.ms = 60000
> acks = all
> batch.size = 16384
> reconnect.backoff.ms = 10
> bootstrap.servers = [localhost:9092]
> receive.buffer.bytes = 32768
> retry.backoff.ms = 100
> buffer.memory = 33554432
> timeout.ms = 30000
> key.serializer = class com.mycompany.kafka.serializer.ToStringEncoder
> retries = 3
> max.request.size = 1048576
> block.on.buffer.full = true
> value.serializer = class com.mycompany.kafka.serializer.JsonEncoder
> metrics.sample.window.ms = 30000
> send.buffer.bytes = 131072
> max.in.flight.requests.per.connection = 5
> metrics.num.samples = 2
> linger.ms = 0
> client.id = site-json
> {noformat}
> # Send some messages...they are successfully sent
> # Shut down the kafka broker
> # Send another message.
> At this point, calling {{get()}} on the returned Future will block
> indefinitely until the broker is restarted.
> It appears that there is some logic in
> {{org.apache.kafka.clients.producer.internal.Sender}} that is supposed to
> mark the Future as "done" in response to a disconnect event (towards the end
> of the run(long) method). However, the while loop earlier in this method
> seems to remove the broker from consideration entirely, so the final loop
> over ClientResponse objects is never executed.
> It seems like "timeout.ms" configuration should be honored in this case, or
> perhaps introduce another timeout, indicating that we should give up waiting
> for the cluster to return.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)