2017-01-30 1 views
1

J'ai un prototype de kafka où je créeComment équilibrer les charges de consommation sur un ordinateur asymétrique?

  • 1 producteur,
  • 2 courtiers,
  • 2 consommateurs dans le même groupe,
  • 1 sujet avec 2 partitions.

Une partition est affectée à chaque consommateur. Le producteur envoie 100 messages aux deux courtiers. Chaque consommateur tire puis traite 50 messages chacun. Le consommateur n ° 2 fonctionne sur une machine lente: il lui faut deux fois plus de temps pour traiter les messages qui lui sont assignés que le consommateur n ° 1. Ainsi, le consommateur n ° 1 termine son traitement en premier et devient inactif. Je voudrais que le consommateur # 1 tire quelques messages du consommateur # 2 afin d'accélérer le traitement. Une file d'attente partagée régulière comme multiprocessing.queue le fait nativement.

  1. Comment puis-je équilibrer les charges de consommation dans un tel cas?

Répondre

1

Vous pouvez ajouter plus de partitions au sujet déjà créé, disons 4 partitions.

./kafka-topics.sh --zookeeper zk_host:port --alter --topic <topic-name> --partitions <num-partitions> 

Ensuite, du côté du consommateur, vous pouvez spécifier à partir de quelles partitions vous voulez consommer. Dans ce cas précis, le consommateur rapide peut consommer des partitions 0 à 2 et l'ordinateur lent uniquement à partir de la partition 3.

Le processus d'exécution d'une partition manuelle sur le consommateur dépend de la bibliothèque que vous utilisez. .

En Java, vous pouvez vérifier la fonction assign() (KafkaConsumer).

+0

'assign' semble faire le travail mais il est incompatible avec' subscribe'. Est-ce que Kafka n'a pas un équilibrage de charge automatique? Pour contourner ce problème, j'ai pensé à créer autant de partitions que la taille de mon lot de messages (16). Ainsi, la machine la plus lente ralentirait les choses pour au plus un message. –

+0

De mon point de vue, la logique d'équilibrage de charge implémentée dans Kafka n'est pas basée sur les performances des consommateurs, elle dépend uniquement de la quantité de consommateurs et de partitions, vous pouvez contrôler les partitions où les messages sont publiés partitions dans le côté du consommateur. La dernière option que vous avez (plus une solution de contournement que toute autre chose) et suivre avec mon exemple de 4 partitions est de générer 3 processus de traitement dans la machine rapide et 1 sur la lente pour forcer Kafka à suivre le comportement désiré . –

+0

oui, lancer # processus basés sur le nombre de cpu –