[ 
https://issues.apache.org/jira/browse/KAFKA-4858?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vahid Hashemian reassigned KAFKA-4858:
--------------------------------------

    Assignee: Vahid Hashemian

> Long topic names created using old kafka-topics.sh can prevent newer brokers 
> from joining any ISRs
> --------------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-4858
>                 URL: https://issues.apache.org/jira/browse/KAFKA-4858
>             Project: Kafka
>          Issue Type: Bug
>    Affects Versions: 0.10.1.1, 0.10.2.0
>            Reporter: James Cheng
>            Assignee: Vahid Hashemian
>
> I ran into a variant of KAFKA-3219 that resulted in a broker being unable to 
> join any ISRs the cluster.
> Prior to 0.10.0.0, the maximum topic length was 255.
> With 0.10.0.0 and beyond, the maximum topic length is 249.
> The check on topic name length is done by kafka-topics.sh prior to topic 
> creation. Thus, it is possible to use a 0.9.0.1 kafka-topics.sh script to 
> create a 255 character topic on a 0.10.1.1 broker.
> When this happens, you will get the following stack trace (the same one seen 
> in KAFKA-3219)
> {code}
> $ TOPIC=$(printf 'd%.0s' {1..255} ) ; bin/kafka-topics.sh --zookeeper 
> 127.0.0.1 --create --topic $TOPIC --partitions 1 --replication-factor 2
> Created topic 
> "ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd".
> {code}
> {code}
> [2017-03-06 22:01:19,011] ERROR [KafkaApi-2] Error when handling request 
> {controller_id=1,controller_epoch=1,partition_states=[{topic=ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd,partition=0,controller_epoch=1,leader=2,leader_epoch=0,isr=[2,1],zk_version=0,replicas=[2,1]}],live_leaders=[{id=2,host=jchengmbpro15,port=9093}]}
>  (kafka.server.KafkaApis)
> java.lang.NullPointerException
>       at 
> scala.collection.mutable.ArrayOps$ofRef$.length$extension(ArrayOps.scala:192)
>       at scala.collection.mutable.ArrayOps$ofRef.length(ArrayOps.scala:192)
>       at 
> scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:32)
>       at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
>       at 
> scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
>       at kafka.log.Log.loadSegments(Log.scala:155)
>       at kafka.log.Log.<init>(Log.scala:108)
>       at kafka.log.LogManager.createLog(LogManager.scala:362)
>       at kafka.cluster.Partition.getOrCreateReplica(Partition.scala:94)
>       at 
> kafka.cluster.Partition$$anonfun$4$$anonfun$apply$2.apply(Partition.scala:174)
>       at 
> kafka.cluster.Partition$$anonfun$4$$anonfun$apply$2.apply(Partition.scala:174)
>       at scala.collection.mutable.HashSet.foreach(HashSet.scala:78)
>       at kafka.cluster.Partition$$anonfun$4.apply(Partition.scala:174)
>       at kafka.cluster.Partition$$anonfun$4.apply(Partition.scala:168)
>       at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:234)
>       at kafka.utils.CoreUtils$.inWriteLock(CoreUtils.scala:242)
>       at kafka.cluster.Partition.makeLeader(Partition.scala:168)
>       at 
> kafka.server.ReplicaManager$$anonfun$makeLeaders$4.apply(ReplicaManager.scala:758)
>       at 
> kafka.server.ReplicaManager$$anonfun$makeLeaders$4.apply(ReplicaManager.scala:757)
>       at 
> scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
>       at 
> scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
>       at 
> scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230)
>       at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
>       at scala.collection.mutable.HashMap.foreach(HashMap.scala:99)
>       at kafka.server.ReplicaManager.makeLeaders(ReplicaManager.scala:757)
>       at 
> kafka.server.ReplicaManager.becomeLeaderOrFollower(ReplicaManager.scala:703)
>       at kafka.server.KafkaApis.handleLeaderAndIsrRequest(KafkaApis.scala:148)
>       at kafka.server.KafkaApis.handle(KafkaApis.scala:82)
>       at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
>       at java.lang.Thread.run(Thread.java:745)
> {code}
> The topic does not get created on disk, but the broker thinks the topic is 
> ready. The broker seems functional, for other topics. I can produce/consume 
> to other topics.
> {code}
> $ ./bin/kafka-topics.sh --zookeeper 127.0.0.1 --describe
> Topic:ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
>  PartitionCount:1        ReplicationFactor:2     Configs:
>       Topic: 
> ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
>   Partition: 0    Leader: 2       Replicas: 2,1   Isr: 2,1
> {code}
> If you stop and restart the broker, it again gets that stack trace. This 
> time, the broker fails to join *any* ISRs in the cluster. Notice below that 
> broker 2 is out of all ISRs
> {code}
> $ ./bin/kafka-topics.sh --zookeeper 127.0.0.1 --describe
> Topic:ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
>  PartitionCount:1        ReplicationFactor:2     Configs:
>       Topic: 
> ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
>   Partition: 0    Leader: 1       Replicas: 2,1   Isr: 1
> Topic:small   PartitionCount:5        ReplicationFactor:2     Configs:
>       Topic: small    Partition: 0    Leader: 1       Replicas: 1,2   Isr: 1
>       Topic: small    Partition: 1    Leader: 1       Replicas: 2,1   Isr: 1
>       Topic: small    Partition: 2    Leader: 1       Replicas: 1,2   Isr: 1
>       Topic: small    Partition: 3    Leader: 1       Replicas: 2,1   Isr: 1
>       Topic: small    Partition: 4    Leader: 1       Replicas: 1,2   Isr: 1
> {code}
> So, it appears that a long topic name that sneaks into the cluster can 
> prevent brokers from partipating in the cluster.
> Furthermore, I'm not exactly sure how to delete the offending topic. A 
> kafka-topics.sh --delete won't delete the topic because it can't talk to all 
> replicas, because the replicas are not in the ISR. We ran into this at work 
> today and ended up having to manually delete the topic configuration from 
> zookeeper and then did a bounce of all affected brokers. Until we did that, 
> those brokers weren't able to join the cluster.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to