You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Josh Rosen (JIRA)" <ji...@apache.org> on 2014/10/01 09:46:34 UTC

[jira] [Commented] (KAFKA-1494) Failed to send messages after 3 tries.

    [ https://issues.apache.org/jira/browse/KAFKA-1494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14154518#comment-14154518 ] 

Josh Rosen commented on KAFKA-1494:
-----------------------------------

I'm able to reproduce a similar problem using Kafka 0.8 with a single broker running inside of Docker (using boot2docker) on OS X.  In this setup, I run a single-node ZooKeeper process in its own Docker container and configure the Kafka broker to use it.  The broker is configured to bind to the Docker container's IP on the VirtualBox network.  Using {{sudo route \-n add 172.17.0.0/16 `boot2docker ip`}}, I've configured my Mac so that programs running outside of Docker can access network services running inside of containers using the containers' own IP addresses (so we use the same IPs for host-container and container-container communication).  I have some Scala code which uses Kafka's ZkUtils to retrieve information on the Kafka cluster state and kafka.producer.Producer to push data into Kafka.

When I attempt to run this, I see errors very similar to the ones reported in this ticket:

{code}
14/10/01 00:22:54 INFO client.ClientUtils$: Fetching metadata from broker id:0,host:172.17.0.187,port:12345 with correlation id 11 for 1 topic(s) Set(test-topic)
14/10/01 00:22:54 INFO producer.SyncProducer: Connected to 172.17.0.187:12345 for producing
14/10/01 00:22:54 INFO producer.SyncProducer: Disconnecting from 172.17.0.187:12345
14/10/01 00:22:54 WARN producer.BrokerPartitionInfo: Error while fetching metadata [{TopicMetadata for topic test-topic ->
No partition metadata for topic test-topic due to kafka.common.LeaderNotAvailableException}] for topic [test-topic]: class kafka.common.LeaderNotAvailableException
{code}

I've found messages on the mailing list that describe this LeaderNotAvailableException; however, I don't think that any of the root causes reported there apply in my case:


- My producer can connect to the broker (I know this because I set `client.id` in my producer configuration and see matching entries in the broker's logs).
- My broker can connect to ZooKeeper (I manually inspected ZooKeeper's contents using zookeeper-shell).
- I didn't attempt to delete any topics.
- ZooKeeper starts with a completely fresh state; leftover state from earlier attempts / experiments isn't an issue here.
- I don't think there are any race-conditions in my client code; I added long (20-30 second) Thread.sleep() calls in my program so that we wait for leader election / metadata propagation to occur after creating the new topic.


I've noticed that ZkUtils.getReplicasForPartition lists the expected replica for the partition, although ZkUtils.getLeaderForPartition returns None, even after multiple attempts / long delays.

This test is easy for me to re-run; the entire setup / teardown of the containers takes less than a minute.  Therefore, it's very easy for me to experiment with different configurations / settings.  I can provide any logs, configuration files, etc. that would be helpful when debugging this; just let me know what you need.

> Failed to send messages after 3 tries.
> --------------------------------------
>
>                 Key: KAFKA-1494
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1494
>             Project: Kafka
>          Issue Type: Bug
>          Components: controller, core
>    Affects Versions: 0.8.1.1
>         Environment: Mac OS 
>            Reporter: darion yaphets
>            Assignee: Neha Narkhede
>
> I use default server & zookeeper config to start-up zookeeper server and kafka broker on my machine to test custom message which based on proto buffer . I write a client to send protobuf-message to kafka broker and source code as following :
>                 Properties properties = new Properties();
> 		properties.put("serializer.class", "java_example.ProtoBufMessage");
> 		properties.put("metadata.broker.list", "localhost:9092");
> 		ProducerConfig config = new ProducerConfig(properties);
> 		testBuf buffer = testBuf.newBuilder().setID(0)
> 				.setUrl("darion.yaphet.org").build();
> 		Producer<String, testBuf> producer = new Producer<String, testBuf>(
> 				config);
> 		producer.send(new KeyedMessage<String, testBuf>("protobuffer", buffer));
> client debug log report a exception:
> [FileSystemMoniter] INFO [main] kafka.utils.Logging$class.info(68) | Disconnecting from localhost:9092
> [FileSystemMoniter] DEBUG [main] kafka.utils.Logging$class.debug(52) | Successfully fetched metadata for 1 topic(s) Set(protobuffer)
> [FileSystemMoniter] WARN [main] kafka.utils.Logging$class.warn(83) | Error while fetching metadata [{TopicMetadata for topic protobuffer -> 
> No partition metadata for topic protobuffer due to kafka.common.LeaderNotAvailableException}] for topic [protobuffer]: class kafka.common.LeaderNotAvailableException 
> [FileSystemMoniter] ERROR [main] kafka.utils.Logging$class.error(97) | Failed to send requests for topics protobuffer with correlation ids in [0,8]
> Exception in thread "main" kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
> 	at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:90)
> 	at kafka.producer.Producer.send(Producer.scala:76)
> 	at kafka.javaapi.producer.Producer.send(Producer.scala:33)
> 	at java_example.ProducerExamples.main(ProducerExamples.java:26)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)