2014-05-07 22 views
8

Quali sono le migliori pratiche, per la creazione di un'app multi-tenant nel contesto di Kafka e tempesta?Come ottenere multi-tenancy nel contesto di Kafka e tempesta?

Ad esempio: creazione dell'argomento per ciascun tenant e consumo di beccuccio multi-argomenti (tramite jolly).

+0

Un commento in ritardo per perfezionare questa domanda: Indipendentemente da ciò che si fa sulla fine di Kafka, ogni istanza di Kafka-becco terrà traccia del proprio offset in zookeeper. Per una corretta multi-tenancy è necessario anche vedere come gestire il nodo Zookeeper. Per i beccucci non trident è piuttosto semplice. provando un nodo radice di zookeeper, ma per Trident, posso solo azzardare che il "client-ID" sia in qualche modo equivalente. Soprattutto quando i nomi di Spout sono così magici in Storm-kafka (sono identificatori e condividono informazioni su ZK) è fondamentale essere consapevoli di ciò che sta accadendo in Zookeeper, quando si tenta la multi-tenancy. –

risposta

2

Penso che l'argomento per ogni inquilino sia la scelta giusta.

La convenzione di denominazione potrebbe essere qualcosa del tipo: topic_base_name_tenant_id.

Le ragioni sono:

  1. Permette configurazione flessibile per ogni conduttore (come @Sebastian detto in precedenza).
  2. Separazione logica più chiara.

Ora diciamo che useremo un approccio diverso. Ad esempio, partizione per ciascun tenant. Potrebbe essere problematico, poiché:

  1. Si sta limitando il livello di parallelismo al numero di inquilini.
  2. Aggiunta di nuovi titolari, risultati che aggiungono nuova partizione → ripubblicare vecchi messaggi (l'algoritmo di partizionamento predefinito è: message_key% partition_size).
1

Non considero la mia risposta come la "migliore pratica" perché non sono un'esperta di Kafka, ma nel caso serva: abbiamo affrontato uno scenario di progettazione simile (un endpoint Kafka disponibile a più team che funge da punto centrale per la creazione di eventi e il routing). Dopo aver riflettuto su diverse alternative, abbiamo deciso cosa suggerire: avere un argomento per applicazione (si potrebbe dire inquilino), personalizzare l'argomento (partizione, limiti, ecc.) In base alle esigenze dell'applicazione.

Spero che questo aiuti.

2

A volte potrebbero essere necessari più argomenti per applicazione. In tal caso, è possibile seguire la seguente convenzione di denominazione degli argomenti: topic_base_name_tenant_id. Quindi, per un determinato argomento di base, avrai argomenti come il numero di inquilini

Problemi correlati