Pourquoi Kafka si vite, nettement en avance sur les autres mq

Il y a beaucoup de l'article en ligne test de Kafka, les résultats des tests sont généralement « suspendus ou battus » Autres MQ. Se sentant plus que B vache est je pense est nécessaire d'analyser soigneusement les raisons pour lesquelles il est si rapide. Cet article décrit Kafka Contrairement à d'autres l'utilisation ou l'article de la technologie, je vais me concentrer sur expliquer - pourquoi le très rapide. (Bien sûr que non parce qu'il a fallu Scala !!!!)

Producteur (écriture de données)

Le producteur (producteur) est chargé de soumettre des données à Kafka, nous allons analyser cette partie.

Kafka recevra le message sont écrites sur le disque dur, il ne sera pas perte de données. Pour optimiser la vitesse d'écriture Kafak en utilisant deux techniques, écriture séquentielle et MMFile.

écriture séquentielle

Parce que le disque dur est une structure mécanique, chaque lecture et écriture sont adressées - > Ecrire, dans lequel l'adresse est une « action mécanique » est le plus de temps. Si dur le plus « haï » Je aléatoire / O, comme la plupart E / S séquentiel Afin d'améliorer lecture et vitesse d'écriture du disque dur, Kafka est d'utiliser E / S séquentiel

La figure montre comment Kafka aux données d'écriture à chaque partition en fait un document après avoir reçu les données de message inséré fin Kafka du fichier (bloc partie imaginaire).

Cette méthode a un inconvénient - il n'y a aucun moyen de suppression des données, Kafka ne efface les données, il toutes les données conservées, chaque consommateur (Consumer) pour chaque sujet a un décalage est utilisé pour indiquer lire les premières données.

La figure ci-dessus deux consommateurs, Consumer1 deux décalage Partition0 correspondant, Partition1 (en supposant que chacun d'une partition du sujet); Consumer2 décalage correspondant à une Partition2. Ce décalage est responsable de la tenue du SDK client, courtier de Kafka ignorer complètement cette chose, dans des circonstances normales SDK enregistrer à l'intérieur de Zookeeper. (Il est nécessaire de fournir l'adresse Zookeeper au consommateur).

Si vous ne retirez pas le disque dur sera certainement plein, donc Kakfa propose deux stratégies pour effacer les données. L'une est basée sur le temps, la seconde est basée sur la taille du fichier de partition. La configuration spécifique se trouve dans son fichier de configuration.

La mémoire mappée Fichiers

Même si l'ordre est écrit à la vitesse du disque d'accès au disque est encore impossible à la mémoire de capture. Donc, Kafka n'est pas données en temps réel est écrit sur le disque, il tire pleinement parti de la mémoire d'appel du système d'exploitation moderne pour accroître l'utilisation de l'efficacité mémoire E / S.

La mémoire mappée fichiers (plus tard appelé mmap) est également traduit dans les fichiers mappés en mémoire, les systèmes d'exploitation 64 bits peuvent généralement représenter un fichier de données 20G, son principe de fonctionnement est l'utilisation directe du système d'exploitation page obtenu fichier mappage direct à la mémoire physique . Après avoir terminé l'opération de cartographie de la mémoire physique sera synchronisé sur votre disque dur (système d'exploitation, le cas échéant).

Par mmap, le processus de lecture et d'écriture aussi dur que la mémoire de lecture-écriture (bien sûr, la mémoire de la machine virtuelle), ne pas à vous soucier de la taille de la mémoire de la mémoire virtuelle pour nous de révéler tous les détails.

De cette façon, vous pouvez obtenir beaucoup d'E / S mise à niveau, ce qui élimine les frais généraux de l'espace utilisateur à l'espace du noyau à copier (les données lues appelleront le premier fichier dans l'espace mémoire du noyau, puis copiés dans l'espace de mémoire utilisateur in.) a aussi un défaut évident - des données non fiables écrites dans le mmap n'a pas été vraiment écrit sur le disque dur, le système d'exploitation écrit vraiment dur lorsque le programme appelle automatiquement ne puis rincer les données. Kafka fournit un paramètre de contrôle n'est pas actif au ras de --producer.type, si Kafka écrit après la mmap rincer immédiatement avant de retourner Producer appelé synchronisation (synchronisation), le retour immédiatement après l'écriture mmap Producteur appel asynchrone ne remet pas la chasse d'eau ( async).

mmap est en fait une fonction sous Linux est utilisé pour mettre en uvre la cartographie de la mémoire, merci Java NIO, il m'a donné une classe mappedbytebuffer peut être utilisé pour mettre en uvre la cartographie de la mémoire (pour que le bâton de lumière peut si rapidement en Java et Scala n'a pas d'importance! !)

Consommateurs (données lues)

Kafka veulent utiliser rapidement le fichier de disque? Ceci est la première question après avoir vu Kafka, ZeroMQ absolument aucun nud de serveur, il ne sera pas utiliser le disque dur, il devrait être plus rapide conforme à la vérité que Kafka. Mais le vrai test est toujours en baisse sa vitesse Kafka « battre et la pendaison. » « Qu'un disque dur avec une mémoire plus rapide », qui défie tout à fait le bon sens, si expliquer que cela se produise - il triche.

Oui, Kafka "tricherie". Que ce soit ou mmap écriture séquentielle en fait les préparatifs de la triche.

Comment améliorer la vitesse des fichiers statiques serveur Web

Pensez un instant, un transfert du serveur Web un fichier statique, comment optimiser? La réponse est la copie zéro. Selon le modèle traditionnel que nous avons lu un fichier à partir du disque dur est

Être copiés dans l'espace du noyau (appel système de lecture, mettez le DMA, donc utiliser l'espace noyau), puis copiés dans l'espace utilisateur (1,2), copié à partir de l'espace utilisateur à l'espace du noyau à nouveau (en utilisant votre appel système socket, donc il a également son propre espace de noyau), et enfin envoyé à la carte réseau (3,4).

Zéro copie de l'espace du noyau (DMA) est l'espace du noyau (Socket), puis envoyé directement sur la carte.

Cette technique est très courante, le problème de C10K et il y avait une introduction très détaillée, cette technologie est également utilisée Nginx, recherche un peu pour trouver beaucoup d'informations.

NIO Java fournit FileChannle, il transferTo, chemin de transferFrom est zéro copie.

Comment Kafka est sans vergogne

Pensez-y? Kafka a mis tous les messages sont stockés dans un fichier dans un, lorsque les consommateurs ont besoin de données Kafka directement au « Fichier » aux consommateurs. C'est le secret réside, comme: nouvelles combinées 10W quantité de données est de 10 Mo, et Kafka manière similaire à envoyer des documents directement à jeter, si le réseau entre les consommateurs et les producteurs est très bon (juste un petit réseau normal 10MB n'est pas une petite chose ... Internet est à la maison à 100Mbps a), 10MB peut seulement besoin d'1s. Donc, la réponse est TPS --10W de Kafka messages 10W traités par seconde.

Vous pourriez dire: il est impossible d'aller transmit le dossier entier? Il y a un certain nombre de messages non désirés à l'intérieur? Oui, Kafka comme un « haut tricherie moléculaire » Je voulais naturellement à tricher DEVONS forcer la grille. Zéro copie correspond sendfile cette fonction (à Linux par exemple), cette fonction accepte

  • out_fd en tant que sortie (typiquement en temps opportun la poignée de prise)
  • poignée in_fd que le fichier d'entrée
  • off_t représente décalage in_fd (où commencer la lecture)
  • size_t représente le nombre de lecture

Oui, Kafka est d'utiliser mmap que la lecture de fichiers et de l'écriture, qui est un descripteur de fichier, un laissez-passer directement sur la sendfile, compenser Ye Hao résolu, les utilisateurs peuvent se tenir ce décalage, chaque demande sera envoyée à ce décalage. (Rappelez-vous Zookeeper mis en?) La quantité de données plus faciles à résoudre, et si les consommateurs veulent plus vite, jeter sur tous les consommateurs. Si cela est fait dans des circonstances normales les consommateurs vont certainement directe a été écrasé à mort, si Kafka offre deux façons --Push, je jette tous, tu es mort, peu importe ce que je fais, Pull, OK, vous me dites combien vous avez besoin, je vais vous donner le numéro.

résumé

le secret Kafka de vitesse est qu'il a mis tous les messages dans un fichier. Amélioration de la vitesse I / O par mmap, l'écriture de données quand il est ajouté à la fin de sorte que la vitesse optimale, lors de la lecture des données de sortie directement avec violence sendfile. Ali est RocketMQ ce modèle, mais il est écrit en Java.

pied de disque Wuchang d'une scène de récolte
Précédent
ZDNet: iOS 11 déjà désespérément BGR: Non-sens!
Prochain
Froid "geler" it real! S'il vous plaît répondre à ma Qiuku juin
Votre peau vraiment! Lillard avant du vélo dans l'arène de la maison
état de synchronisation QQ ce qui est de pousser ou tirer?
Juste NDRC monnaie virtuelle « minière » hors de la classe comme l'industrie, la chaîne industrielle pour être cool?
Apprenez tout une minutes d'équilibrage de charge
Hong Kong médias: Sun Li Ka-shing de seulement 23 ans les femmes en ligne successeur de troisième génération à
comté Pu'er dans le Yunnan Ximeng Wa Nouveau Festival du riz "a Moe"
10 milliards de données sur la migration de données lisses, sans affecter le service
Haikou lumière spectacle mis en scène pour célébrer la Journée nationale
Comment la sécurité est le message transmis sur le réseau
Mongolie intérieure Arxan nationale accueillent les visiteurs de faire le tour de la saison des neiges des États-Unis
"Battle Royale" raids de voyage à la main iOS et Li Kui Li Gui détestent l'air libre