Schéma du modèle de fil Kafka et de ses défauts de conception

Intergiciel Interest Circle 2021-11-25 18:44:05
sch ma du mod le

Photos

Quel modèle d'interaction thread est utilisé,Comment améliorer efficacement la capacité de traitement du réseau est un sujet très important dans la programmation orientée réseau.

Une étude approfondieKafka BrokerLe modèle de thread côté serveur est également comprisKafkaUn élément essentiel du mécanisme de travail.

Cet article est divisé en trois parties:

  • Paramètres de configuration liés au réseau

  • Schéma du mécanisme de travail du modèle de fil

  • C'est exact.Kafka Un peu de réflexion sur le modèle thread

1、 Paramètres de configuration liés au réseau

Kafka Broker Les fils de bout en bout liés au réseau sont principalement divisés en network、IO Deux types de fils ,En conséquence,Kafka Deux paramètres sont fournis pour définir le nombre de fils ,Comme suit::

  • num.network.threads Nombre de fils réseau ,La valeur par défaut est3.
  • num.io.threads IONombre de fils,La valeur par défaut est8.

Qu'est - ce qu'un fil réseau ,Qu'est - ce que c'est?IOEt les fils?? Veuillez apporter les questions ci - dessus. , Entrez dans l'échange d'apprentissage de cet article .

2、 Recherche sur le modèle de fil

L'auteur prône “Il faut le voir pour le croire.”, J'aime analyser son code source. , Pour affiner le résumé , Par conséquent, la méthode d'enquête de cet article est toujours basée sur la lecture du code source , Et pour améliorer la lisibilité, , Divers organigrammes seront raffinés .

Comprendre la signification des paramètres ci - dessus , L'approche habituelle consiste à examiner la chaîne d'appels de ces paramètres , Comprendre et analyser en fonction du contexte .

num.io.threads La chaîne d'appel d'utilisation des paramètres est illustrée dans la figure ci - dessous. :

Photos

num.network.threads La chaîne d'appel des paramètres est illustrée dans la figure ci - dessous. :

Photos

À partir de là, nous pouvons tirer deux conclusions importantes :

  • Network、IO Les paramètres liés au fil supportent la modification dynamique
  • Network、IO Paramètres liés au fil le consommateur est KafkaServer.

Ensuite, concentrez - vous sur KafkaServerAllez..

2.1 IO Mécanisme de travail du fil

De la pile d'appels ci - dessus , Nous n'avons pas eu de difficultés à trouver un emploi num.io.threads Le Code d'utilisation spécifique est indiqué dans la figure ci - dessous. :

Photos

Les principaux points de mise en œuvre sont résumés comme suit: :

  • KafkaApis Définit principalement la logique de traitement des demandes individuelles , Par exemple, envoi de messages 、Message pull、 Logique de mise en œuvre spécifique telle que la soumission de bits , Pour plus de détails, veuillez consulter les codes suivants: :

    Photos
  • IntroductionKafkaRequestHandlerPool(IOPool de Threads), Le nombre de fils détenus à l'intérieur est déterminé par num.io.threadsDécide que.

  • KafkaRequestHandlerPool Un pool de Threads est détenu en interne , Le comportement de chaque fil est KafkaRequestHandlerDéfinition de la classe, C'est - à - dire KafkaRequestHandlerPourIOThread,Et parKafkaRequestHandlerPour appelerKafkaApisMise en œuvre concrète,Son Code est le suivant::Photos

    Conseils chaleureux:KafkaRequestHandlerLa mise en œuvre de,Principalement à partir deRequestChannel( Dans la file d'attente de traitement ) Obtenir la demande et l'exécuter , L'accent sera mis plus loin sur IO Thread exécute les Indicateurs de suivi(IO Taux de ralenti du fil ).

  • UnKafkaRequestHandlerPool Le pool de Threads a un RequestChannel**( Demandes en attente )**,Et créerKafkaRequestHandler,Les codes sont les suivants::

    Photos Il s'agit de l'attention dans KafkaMoyenne,IO Règles de nommage pour les noms de thread :“data-plane-kafka-request-handler-” + {brokerId} + "-" + Numéro de série.

  • KafkaIn2.2 La version commence par l'introduction du concept de surface de contrôle et de surface de données , Pour distinguer les différentes demandes , L'accent sera mis plus loin dans la troisième partie. .

En interprétant le code ci - dessus , Je ne pense pas qu'il soit difficile de trouver le diagramme de séquence suivant :

Photos

C'est...RequestChannel D'où viennent les demandes en attente? ?

2.2 NetWork Mécanisme de travail du fil

network Le Code d'initialisation du thread est SocketServerDecreateDataPlaneAcceptorsAndProcessorsMéthodes,Les détails sont présentés ci - dessous.:

Photos

Les principaux points sont les suivants: :

  • Avant d'introduire la méthode, nous introduisons la signification des deux paramètres de la méthode :

    • int dataProcessorsPerListener Nombre de fils de traitement réseau ,Extrait de num.network.threads.
    • Seq[EndPoint] endpoints kafkaSetendpoint, En fait, il est configuré Kafka serverDanslisteners,Comme le montre la figure ci - dessous: Photos
  • Selonkafka endpointCréationAcceptor.Ce qu'on appelleKafka endpoint Il s'agit de configurer listeners, Port et Protocole d'écoute ,Kafka Prise en charge de l'écoute Multi - Protocole et multi - Port , Peut utiliser pleinement la carte réseau de l'hôte hôte hôte pour le shunt ,Kafka Le modèle de réseau est vraiment maître - esclave ReactorModèle,Prise en charge de plusieursAcceptor.Acceptor Règles de nommage pour les Threads :data-plane-kafka-socket-acceptor-{listeners-name}-{securityProtocol}-port,Parmi euxsecurityProtocolÇa veut direurl Chaîne avant deux points ,Par exemple PLAINTEXT.Photos

    AcceptorPrincipales responsabilités:ÉcouterOP_ACCEPTÉvénements, Accepter le lien et le transmettre à NetWorkTraitement des fils.

  • Par appeladdDataPlaneProcessors Pour chaque méthode AcceptorCréationnum.network.threads Fils de traitement , Utilisé pour gérer les événements de lecture et d'écriture du réseau , Est responsable du décodage à partir du réseau Request、 Écrire les résultats de la réponse au client , La règle de nommage pour chaque thread réseau est :data-plane(Surface des données)||control-plane(Surface de contrôle)"--kafka-network-thread-{brokerId}-{endPoint.listenerName}-{endPoint.securityProtocol}-{processor.id}.

  • ChaqueNetWorkLe thread correspond à unProcessorObjet, Voici un exemple de code de base: :Photos

    Le thread réseau est analysé du réseau à la demande et placé dans RequestChannel, Pour fournir IO Thread get and Process .

Pour que tout le monde comprenne, Le diagramme de séquence des travaux est également donné comme suit: :

Photos

2.3 IllustrationKafkaModèle de thread

L'explication du code source est vraiment abstraite , Ensuite, combiné à la lecture du code source par l'auteur , Résumé Kafka Le modèle de thread est illustré ci - dessous :

Photos

Les points saillants sont les suivants: :

  • KafkaPeut être basé surlistenerNombre de,Créer la correspondanceAcceptor,Réalisation multipleAcceptor.
  • Acceptor Le devoir est de traiter avec OP_ACCEPTÉvénements, Accepter la connexion du client , Une fois la connexion établie avec succès, envoyez - la à ProcesorThread.
  • ProcessorThread,InKafka Appelé thread réseau (network), Responsable de la lecture et de l'écriture du réseau .
    • networkBesoin de traitementOP_READ、OP_WRITEÉvénements.
    • OP_READ L'événement est principalement de décoder le flux binaire du côté serveur de l'expéditeur du client en une requête indépendante ,Jetez - le. File d'attente globale des demandes (RequestChannel).
    • QuandKafkaDeIO Une fois qu'un thread a traité une demande , La demande sera transmise pour décoder la demande Processor(network) Retour au client dans le thread .
  • Kafka IO Thread get tasks from Global request queue ,Et appelleKafkaApis Les méthodes pertinentes dans le traitement logique correspondant sont complétées , Et envoyer les résultats de la réponse à NetwokThread, Pour accomplir une tâche .

3、 Quelques réflexions sur le modèle thread

Encore une fois, résumons Kafka Plusieurs types de Threads dans le modèle de thread ( Analogie maître - esclave ReactorModèle):

  • kafka-socket-acceptor Plus de sujets et d'esclaves ReactorDans le modèleMain-Reactor, Responsable de l'établissement des événements de connexion (OP_ACCEPT).

  • kafka-network-thread Plus que maître et esclave ReactorDans le modèleSub-Reactor, Responsable de la lecture et de l'écriture du réseau .

    Remarques: Si vous avez vu mon analyse précédente, RocketMQ、Netty Modèle de réseau de cadres égaux , Ils appellent ces fils IOThread, J'ai tendance à m'appeler comme ça. , Parce qu'il appelle le Sous - sol IO API Lire et écrire sur le Web .

  • kafka-request-handler Analogie maître - esclave ReactorDans le modèlePool de Threads d'affaires, Parce que la responsabilité de ce pool de Threads est également de répondre logiquement à chaque demande spécifique ,Mais dansKafkaEst appeléIOThread.

    Remarques: Le nom lui - même n'est pas vrai ou faux , Mais soyons faciles à prendre pour acquis KafkaDeIO Le thread traite la lecture et l'écriture du réseau , Si nous voulons en savoir plus sur le fonctionnement sous - jacent d'un cadre open source , Lire le code source est une très bonne façon , Parce que ce que vous voyez est réel Oui..

Kafka Le modèle de Threading pour le réseau est sans aucun doute le plus classique dans le domaine de la programmation réseau Maître - esclaveReactorModèle,Mais... L'individu estime que la mise en oeuvre ci - dessus présente un grand défaut : Isolement insuffisant des fils d'affaires , En d'autres termes, la demande n'a pas de priorité , Facile à influencer les uns les autres .

Et ce qui est intéressant, c'est que Kafka2.2 Surface de données introduite dans la version 、 Concept de surface de contrôle ,Pour isolerkafka Commandes de contrôle et de données internes :

  • Surface de contrôle kafkaIntraclustercontrollerEnvoyé àBroker Commandes pour les noeuds , Comprend principalement les commandes suivantes: :

    • LEADER_AND_ISR PartitionLeader Occurrence et ISRChangement.

    • STOP_REPLICA Arrêter la réplication.

    • UPDATE_METADATA

      De chaque BrokerSynchroniser les métadonnées.

  • Surface des données En plus de ce qui précède3 Commandes autres que .

Mais je pense que ce qui précède L'isolement est loin d'être suffisant , Demande le paquet de battements de cœur du client 、 Pour les demandes d'extraction de données , Si plusieurs groupes de consommateurs consomment des données prématurées ,CausepagecacheRaté., Les données doivent être chargées à partir du disque , Lire le disque en cas de goulot d'étranglement , Les demandes de battements de cœur du client ne peuvent pas être traitées en temps opportun ,BrokerIn10sJe n'ai pas reçu(Pour être précis10s Aucun processus de traitement des paquets de battements cardiaques n'a été déclenché à l'intérieur ), Le Groupe de consommation sera affecté par un temps d'arrêt cardiaque Broker Marqué comme arrêt ,Ce qui déclenche le rééquilibrage, Rendre le Groupe de consommation incapable de consommer , Et facile à avalancher ,Le Tous les groupes de consommateurs du Groupe ne sont pas consommables , Son impact est concevable .

Ici, je dois aller avec RocketMQ Pour faire une comparaison latérale ,RocketMQ Le modèle de Threading de prend en charge différents types de commandes en utilisant différents pools de Threads , Message send Processing thread Pool 、 Les pools de Threads de traction de messages ont des pools de Threads séparés , A un effet d'isolement des ressources thread , Pas autant que d'autres commandes plus importantes stagnent dans la faim en raison de la lenteur du traitement d'une catégorie de demandes , Avec des conséquences incalculables .


版权声明
本文为[Intergiciel Interest Circle]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125183653142l.html

  1. GitHub上霸榜久居不下的《Java面试突击宝典》,java图形用户界面设计基础
  2. GitHub上访问下载破百万的神仙文档《Java面试神技》看完我呆了,java面试问项目中遇到的问题
  3. GitHub上标星75k 超牛的《Java面试突击版,java高级工程师技能
  4. Docker development environment Preview
  5. JavaScript高級深入淺出:掌握 this 指向
  6. JavaScript Advanced Insight and outside: Mastering this direction
  7. Vue de l'application pratique de Javascript, drop drag Event
  8. docker 安装部署 Jenkins 2.322
  9. kafka安装
  10. 近九万字图文详解RabbitMQ
  11. Engaged in Java for one and a half years, how to break through yourself
  12. 输出9*9乘法表----java
  13. 判断一个数是不是素数-------java
  14. java项目,记录页面修改值,内部打“官司”用
  15. Docker installation Deployment Jenkins 2.322
  16. Comment porter un pantalon en hiver? Les petits hommes, les jambes épaisses et la largeur de l'entrejambe peuvent être vus. 3 techniques pour éviter la foudre
  17. MySQL下载和安装教程
  18. In depth analysis of rocketmq source code - message storage module
  19. Spring transaction management
  20. mysql恢复ibd数据,为何频频报错?
  21. [skills with annual salary of 60W] after working for 5 years, do you really understand netty and why to use it? (deep dry goods)
  22. Pourquoi MySQL récupère - t - il fréquemment les données ibd?
  23. Tutoriels de téléchargement et d'installation MySQL
  24. In IntelliJ idea, develop a fishing and reading plug-in
  25. Talk about how to integrate SPI with spring
  26. 重学Spring系列之Swagger2.0和Swagger3.0
  27. Hadoop05【命令操作】,Java400道面试题通关宝典助你进大厂
  28. Guava Cache缓存设计原理,java基础入门
  29. Gson:GitHub 标星 18K 的 JSON 解析器,Google 出品的 Java JSON 解析器
  30. gRPC学习之六:gRPC-Gateway集成swagger,java语言程序设计与数据结构进阶版
  31. Projet Java, enregistrer la valeur de modification de la page, utilisé pour les litiges internes
  32. Déterminer si un nombre est un nombre premier - - Java
  33. Sortie 9 * 9 tableau de multiplication - Java
  34. Plusieurs façons de réinitialiser le déplacement du Groupe de consommateurs Kafka
  35. GRPC Learning six: GRPC Gateway Integrated Swagger, Java language programming and data structure Advanced Edition
  36. python数据结构:数组、列表、栈、队列及实现
  37. Gson: json Parser for github Star 18k, Java json Parser from Google
  38. hive学习笔记之二:复杂数据类型,五分钟搞懂MySQL主从复制原理
  39. hive学习笔记之一:基本数据类型,java实现分页技术详解
  40. HDU-3038-How Many Answers Are Wrong【 带权并查集 】题解,java实战项目论坛
  41. HDU 1078 FatMouse and Cheese(记忆化搜索,DP,rocketmq教程教程
  42. Principes de conception du cache Guava, Introduction à la base Java
  43. Un pantalon beige = élégant, blanc + haut de gamme, si beau cet hiver!
  44. Hadoop05 【 commande 】, Java 400 questions d'entrevue pour vous aider à entrer dans l'usine
  45. [Java multithreading] static synchronized method and synchronized (class) code block
  46. [Java multithreading] synchronized statement block
  47. [Java multithreading] synchronized synchronization method
  48. [Java multithreading] thread priority and guard thread
  49. [Java multithreading] stop the thread
  50. Several methods of [Java multithreading] thread
  51. [Java multithreading] Java multithreading skills
  52. Structure des données Python: tableaux, listes, piles, files d'attente et implémentations
  53. Re - Learning Swagger 2.0 and Swagger 3.0 of Spring Series
  54. Error editing HTML5 using webstorm
  55. 【Spring】mybatis-spring
  56. JavaScript post request returned an exception, possibly Cross - Domain request
  57. Springboot + mybatis Plus + springsecurity + JWT implements user stateless request authentication (front and back end separation)
  58. SQL injection and XSS attack of springboot security vulnerability
  59. Docker employee readme: Why did docker lose to kubernetes?
  60. 19 high force linux commands, hurry to use them!