why kafka producer failed to write other partition except 0 partition?
<p>I have a kafka producer to write to the topic of kafka cluster:</p>

<pre><code>    InputStream is = KafkaHandler.class.getResourceAsStream("/conf/kafka.properties");
    props.load(new InputStreamReader(is));
    for (Object key : props.keySet()) {
        log.debug("&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;" + key.toString() + "=" + props.getProperty(key.toString()).toString());
    }
    ProducerConfig config = new ProducerConfig(props);
    producer = new Producer&lt;String, String&gt;(config);
    topic = props.getProperty("kafka.topic");
    if (null != producer &amp;&amp; null != topic) {
        KeyedMessage&lt;String, String&gt; data = new KeyedMessage&lt;String, String&gt;(topic, key, value);
        producer.send(data);
        log.debug("KafkaHandler::writeKafka(): data=" + data);
    } else {
        throw new KafkaException("kafka producer is bad");
    }
</code></pre>

<p>and the kafka.properties:</p>

<pre><code>    metadata.broker.list=192.168.199.156:9092,192.168.199.151:9092,192.168.199.157:9092,192.168.199.158:9092,192.168.199.159:9092
     zookeeper.connect=192.168.199.156:2181,192.168.199.151:2181,192.168.199.157:2181
    serializer.class=kafka.serializer.StringEncoder
    request.required.acks=1
    #partitioner.class=com.cwl.util.KafkaNewPartitioner
    partitioner.class=com.cwl.util.KafkaPartitioner
    kafka.topic=Cwl_Web_Collector
</code></pre>

<p>while the partition class:</p>

<pre><code>    public class KafkaPartitioner implements Partitioner {
    private Random random = new java.util.Random();
    public KafkaPartitioner(VerifiableProperties props) {}
    public int partition(Object key, int numOfPartition) {
    //      return ((int)System.currentTimeMillis() % numOfPartition);

    int partition = random.nextInt(numOfPartition); // return random 0-7 failed: kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
    //      int partition = 0;  // return 0 will write OK
    return partition;
        }
    }
</code></pre>

<p>I found the "num.partitions = 8" in following kafka configuration:</p>

<pre><code>            request.timeout.ms = 30000
log.roll.hours = 168
inter.broker.protocol.version = 0.9.0.X
log.preallocate = false
security.inter.broker.protocol = PLAINTEXT
controller.socket.timeout.ms = 30000
broker.id.generation.enable = false
ssl.keymanager.algorithm = SunX509
ssl.key.password = null
log.cleaner.enable = true
ssl.provider = null
num.recovery.threads.per.data.dir = 1
background.threads = 10
unclean.leader.election.enable = false
sasl.kerberos.kinit.cmd = /usr/bin/kinit
replica.lag.time.max.ms = 10000
ssl.endpoint.identification.algorithm = null
auto.create.topics.enable = true
zookeeper.sync.time.ms = 2000
ssl.client.auth = none
ssl.keystore.password = null
log.cleaner.io.buffer.load.factor = 0.9
offsets.topic.compression.codec = 0
log.retention.hours = 72
log.dirs = /var/local/kafka/data
ssl.protocol = TLS
log.index.size.max.bytes = 10485760
sasl.kerberos.min.time.before.relogin = 60000
log.retention.minutes = null
connections.max.idle.ms = 600000
ssl.trustmanager.algorithm = PKIX
offsets.retention.minutes = 1440
max.connections.per.ip = 2147483647
replica.fetch.wait.max.ms = 500
metrics.num.samples = 2
port = 9092
offsets.retention.check.interval.ms = 600000
log.cleaner.dedupe.buffer.size = 134217728
log.segment.bytes = 1073741824
group.min.session.timeout.ms = 6000
producer.purgatory.purge.interval.requests = 1000
min.insync.replicas = 1
ssl.truststore.password = null
log.flush.scheduler.interval.ms = 9223372036854775807
socket.receive.buffer.bytes = 102400
leader.imbalance.per.broker.percentage = 10
num.io.threads = 8
zookeeper.connect = cdhmaster1:2181,cdhmaster2:2181,cdhslave1:2181
queued.max.requests = 500
offsets.topic.replication.factor = 3
replica.socket.timeout.ms = 30000
offsets.topic.segment.bytes = 104857600
replica.high.watermark.checkpoint.interval.ms = 5000
broker.id = 206
ssl.keystore.location = null
listeners = PLAINTEXT://cdhmaster1:9092,
log.flush.interval.messages = 9223372036854775807
principal.builder.class = class org.apache.kafka.common.security.auth.DefaultPrincipalBuilder
log.retention.ms = null
offsets.commit.required.acks = -1
sasl.kerberos.principal.to.local.rules = [DEFAULT]
group.max.session.timeout.ms = 30000
num.replica.fetchers = 1
advertised.listeners = null
replica.socket.receive.buffer.bytes = 65536
delete.topic.enable = true
log.index.interval.bytes = 4096
metric.reporters = []
compression.type = producer
log.cleanup.policy = delete
controlled.shutdown.max.retries = 3
log.cleaner.threads = 1
quota.window.size.seconds = 1
zookeeper.connection.timeout.ms = null
offsets.load.buffer.size = 5242880
zookeeper.session.timeout.ms = 6000
ssl.cipher.suites = null
authorizer.class.name = 
sasl.kerberos.ticket.renew.jitter = 0.05
sasl.kerberos.service.name = kafka
controlled.shutdown.enable = true
offsets.topic.num.partitions = 50
quota.window.num = 11
message.max.bytes = 1000000
log.cleaner.backoff.ms = 15000
log.roll.jitter.hours = 0
log.retention.check.interval.ms = 300000
replica.fetch.max.bytes = 1048576
log.cleaner.delete.retention.ms = 259200000
fetch.purgatory.purge.interval.requests = 1000
log.cleaner.min.cleanable.ratio = 0.5
offsets.commit.timeout.ms = 5000
zookeeper.set.acl = false
log.retention.bytes = -1
offset.metadata.max.bytes = 4096
leader.imbalance.check.interval.seconds = 300
quota.consumer.default = 9223372036854775807
log.roll.jitter.ms = null
reserved.broker.max.id = 1000
replica.fetch.backoff.ms = 1000
advertised.host.name = null
quota.producer.default = 9223372036854775807
log.cleaner.io.buffer.size = 524288
controlled.shutdown.retry.backoff.ms = 5000
log.dir = /tmp/kafka-logs
log.flush.offset.checkpoint.interval.ms = 60000
log.segment.delete.delay.ms = 60000
num.partitions = 8
num.network.threads = 3
socket.request.max.bytes = 104857600
sasl.kerberos.ticket.renew.window.factor = 0.8
log.roll.ms = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
socket.send.buffer.bytes = 102400
log.flush.interval.ms = null
ssl.truststore.location = null
log.cleaner.io.max.bytes.per.second = 1.7976931348623157E308
default.replication.factor = 1
metrics.sample.window.ms = 30000
auto.leader.rebalance.enable = true
host.name = 
ssl.truststore.type = JKS
advertised.port = null
max.connections.per.ip.overrides = 
replica.fetch.min.bytes = 1
ssl.keystore.type = JKS
</code></pre>

<p>When partition return 0, it's OK to write over 1M records; while partition return random between 0 and 7, exception is thrown: </p>

<pre><code>    kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:91)
</code></pre>

<p>Can anybody help figure out the root cause? Thanks!</p>