2015-11-12 14 views
17

Ho un cluster Kafka in esecuzione con 2 partizioni. Stavo cercando un modo per aumentare il conteggio delle partizioni a 3. Tuttavia, non voglio perdere i messaggi esistenti nell'argomento. Ho provato a fermare Kafka, modificando il file server.properties per aumentare il numero di partizioni su 3 e riavviare Kafka. Tuttavia, questo non sembra cambiare nulla. Usando Kafka ConsumerOffsetChecker, continuo a vedere che sta usando solo 2 partizioni. La versione di Kafka che sto usando è 0.8.2.2. Nella versione 0.8.1, c'era uno script chiamato kafka-add-partitions.sh, che immagino potrebbe fare il trucco. Tuttavia, non vedo nessuno di questi script in 0.8.2. C'è un modo per realizzare questo? Ho fatto esperimenti con la creazione di un argomento completamente nuovo e per quello sembra utilizzare 3 partizioni in base alla modifica nel file server.properties. Tuttavia, per gli argomenti esistenti, non sembra preoccuparsene.È possibile aggiungere partizioni a un argomento esistente in Kafka 0.8.2

+0

L'ultima versione di Apache Kafka è 0.8.2.2, dubito che si sta utilizzando "2.10". Potresti voler controllare di nuovo le versioni. – C4stor

+0

@ C4stor In realtà intendevo Kafka basato su Scala 2.10, che è esattamente la versione di cui hai parlato 0.8.2.2. Dispiace per la confusione. Modificherò la mia domanda. –

risposta

36

Sembra che è possibile utilizzare this script anziché:

bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic my_topic_name 
    --partitions 40 

Nel codice sembra che fanno stessa cosa:

AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(topic, partitionReplicaList, zkClient, true) 

kafka-topics.sh esegue this pezzo di codice, così come AddPartitionsCommand usato da script kafka-add-partition.

Tuttavia è necessario essere consapevoli di ri-partizionamento quando usando la chiave:

Essere consapevoli del fatto che un caso d'uso per le partizioni è semanticamente partizione dati e partizioni aggiungendo non cambia la compartimentazione dei dati esistenti quindi questo può disturbare i consumatori se si affidano a quella partizione . Cioè se i dati sono partizionati da hash(key) % number_of_partitions allora questo partizionamento sarà potenzialmente mischiato aggiungendo le partizioni, ma Kafka non tenterà di ridistribuire automaticamente i dati in alcun modo a .

+0

Grazie. Lo proverò –

+1

Se i dati devono essere ripartizionati, esiste un modo solo per spostare i messaggi che non sono stati letti e ignorare i messaggi che sono stati letti? – Glide

+1

in linea con la filosofia "append-only", immagino che dovresti fare di tutto per riuscirci. Direi che il più semplice è fermare il consumo su quell'argomento, creare un nuovo argomento con la quantità di partizioni che desideri, ripubblicare i messaggi non letti sul nuovo argomento e poi continuare a consumare il nuovo argomento. – CmdrDats

2

Si prega di notare che nel mio caso il valore zk_host: port/chroot per il parametro --zookeeper ha gettato la seguente eccezione:

ERRORE java.lang.IllegalArgumentException: Argomento my_topic_name non esiste sul ZK percorso zk_host: porto/chroot.

Così, ho provato quanto segue e ha funzionato:

bin/kafka-topics.sh --alter --zookeeper zk_host:port --topic my_topic_name --partitions 10 
+0

'chroot' è un'impostazione di configurazione * opzionale *, non pensata per essere presa alla lettera –

Problemi correlati