Kafka 笔记_十二翼堕落天使-CSDN博客

      最后更新:2022-01-06 19:42:56 手机定位技术交流文章

      什么是 MQ

      有几个个人认为,通过信息发送和收据分离,MQ使得应用程序能够分步骤和合并。根据这种看法,最低质量是一个步骤。是用来解耦的,但是,这只是一个MQ效应,而不是结束。MQ的真正功能是沟通2011年叙利亚抗议活动特别报导,在申请一级,制定了一套简化的通信议定书。

      HTTP在一个分布式系统中用于两个模块之间的通信。要么是自己创造的TCP 要么是自己创造的TCP 要么是自己创造的TCP尽管如此,这两项协定都是原始协定。HTTP协议造成双向通信问题--模块A可以调用模块B,但B也可主动与A联系。如果要做到这个,服务器网络,它连接的时间不长( HTTP 2) 。 完全找不到 0 的图书馆 。TCP甚至更初级。这是一个粘糊糊的麻袋, 心跳, 和秘密合同。想一想就头皮发麻。

      MQ需要做的就是就这些协定制定一个基本的“协议”――生产者/消费者模式。 MQ为我们提供的“协议”是一个更高层次的沟通模式,而不是一个具体的沟通协议。


      消息队列的流派

      MQ和中间商

      这种类型通常使用服务器作为经纪人,所有通信都通过它传输。 制作人向它传递信息并终止他的使命,而制造人将信息传递给消费者(或消费者将信息传递给消费者 ) 。

      (卡夫卡、积极MQ和JMS)

      生产者向经纪人提供数据和钥匙。经纪人比较了Key和决定提供哪些消费者。这是我们使用的最典型的模型。这是我们对MQ的整体认识在这种模式下,专题往往是较大专题的一个子集。即使是单一的系统也可能只有一个主题。以某种方式,专题排队。制片人给Key发短信 类似"嘿,我们走吧"将数据放入 Key 的队列中。”

      虽然结构相同,但Kafka是JMS的几倍,因此这类MQ只有Kafka作为替代。

      (RabbitMQ 或 AMQP 协议)

      生产者提供密钥和数据,消费者指定用户队列,Broker接收数据,并使用特定逻辑计算适当的密钥队列,然后将数据发送到队列。

      在此模式下, 键和队列被分隔 。队列在这种形式下非常轻(兔子Q的顶部容量由您的内存决定)。客户关心自己的知识。生产者不必照顾收到数据的人。只要输入键。在QMQO中,中间层称为交易所。

      AMQP分为四类:

      Direct Exchange 队列等于键
      Fanout Exchange 不要理会Key 给每个队列都做个复制品
      Topic Exchange 密钥可以使用宽字符模糊匹配队列 。
      Header Exchange 忽略密钥, 取而代之地依靠主元数据选择要向队列提交哪条信息( AMQP 头版元数据非常广泛且自定义 ) 。

      这一结构的框架允许有很大程度的通信灵活性,我们可以想象的任何通信方法都可以在四个交易所中传达。

      没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,MQ

      ZeroMQ

      没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,没有Broker,MQ,MQ 的代表是 ZeroMQ。该作者非常睿智,他非常敏锐的意识到——MQ 是更高级的 Socket,它是解决通讯问题的,所以 ZeroMQ 被设计成了一个“库”而不是一个中间件。

      节点之间的通讯传递到彼此的队列,每个节点既是生产者又是消费者。 ZeroMQ所做的是封装一套可能发送和检索数据的API,类似于Socket。

      零MQ是一个多语言的,强大的 演员模型邮箱。认为你的软件是一个演员。提供信箱功能的图书馆为零MQ。零MQ支持在同一台机器上进行RPC通信,支持TCP和UDP在单独机器上的连接。

      如果您想要一个强大、灵活和野蛮的通信能力, 零MQ是前进的方向。


      Kafka 介绍

      LinkedIn是第一个创建卡夫卡的人。该分区由一个分布式(片段)、多拷贝(Reprica)、Zookeper协调的短信系统支持。其最显著的特点是,它有能力实时分析大量数据,以满足各种需求情况。这篇文章是全球之声在线特稿的一部分。2010年向阿帕奇基金会捐赠的 " 链接 " 于2010年成为最受欢迎的开放源码项目。

      与卡夫卡使用时间的瞬间

      • 日志收集

        公司可以通过Kafka Log公司以单一界面服务的形式,通过Kafka公司从Hadop、HBase、Solr和其他消费者等消费者获得Kafka Log公司提供的服务。

      • 消息系统:

        连结制造商和客户 暗藏处等等

      • 用户活动跟踪

        Kafka经常用来记录网站用户或应用程序用户的行为。和上网、搜索、点击等等类似一些服务器将这些行动传达给在卡夫卡的 " 主题 ",并在网站上公布。然后对这些专题进行订阅,以便进行实时监测和分析。然后,它们被输入Hadop,在那里,数据仓库用于离线分析和挖掘。

      • 运营指标

        Kafka还经常用于记录业务监测数据,例如为一系列分布式应用软件收集数据,以及就警报和报告等不同程序产生集中反馈。

      卡夫卡的基本想法

      Kafka是一个分布式、分割式的短信服务(通常称为 Countlog),它提供一个信息系统,具有功能,但有一个独特的设计。

      在这个意义上,卡夫卡依靠联合监测系统规则的逻辑,但并不完全遵守这些规则。

      基本信息相关术语 :

      Broker 经纪人是一个中间信息处理节点,如卡夫卡节点;一个或多个经纪人可以创建卡夫卡群集。
      Topic Kafka根据主题对信息进行分类,发给Kafka群组的每条信息都必须指定一个主题。
      Producer 信息制作人是一个向经纪人发送信息的客户端。
      Consumer 消费者、客户阅读Broker的留言
      Consumer Group 每个客户都是某个消费者集团的成员。许多消费者团体可以使用单一的信息。然而,客户只能从一个消费者集团消费。
      Partition 对象可以物理地分为一个以上的分区,每个分区。

      TCP 协议用于服务器(Broker)与客户(生产商、消费者)之间的通信。


      Kafka 安装

      环境准备

      • jdk
      • zookeeper

      配置文件

      • config/server.properties

      启动卡夫卡服务器

      • 开始 Zookeeper
      • 启动 Kafka
      • 验证发射成功率(进入ZK,以确定所提供的身份证明是否有经纪人)。

      构建一个主题, 发送信息, 并向客户发送信息 。

      关于消息的细节

      • 信息由制片人发送到Broker, Broker 将信息保存在本地日志文件中 。
      • 电文以有条不紊的方式存储,由Offset 偏转来指定电文的顺序。
      • 消费者新闻也解释了当前消费者信息通过《Offest》的定位。

      单播消息和多播消息

      单播消息

      两个消费者和一个生产者在一个Kafka专题中被激活,问题是:生产者是否传递了两个消费者同时消费的信息?

      如果两个客户属于同一消费群体,他们中只有一人能够获得订阅科目的信息。

      换句话说, " 专题 " 只向同一消费者群体中的一个客户发出信息。

      多播消息

      由于几个消费者群体赞同同一主题,每个群体只有一个消费者能够获得信息。

      事实上,一个以上消费群体中不止一个客户收到了相同的电文。

      见关于消费类别的资料

      请添加图片描述

      侧重于以下细节:

      CURRENT-OFFSET 最终吸收的信息数量。
      LOG-END-OFFSET 偏移最近一条消息(信件总数)
      LAG 积压了多少条消息

      卡夫卡介质的主题和分解

      主题

      在卡夫卡语中,“主题”是一个逻辑概念,通过它对信息进行分类,不同的主题与“主题”消费者消费有关。

      但有一个问题,如果这个主题的新闻是 非常,非常大, 因为它被保存在日志文件里, 而卡夫卡发展了分割的概念 来克服这个文件的问题。

      分区

      片段在《主题》中设有一个信息分区。

      • 分区分区存储, 克服了文件过度存储的问题
      • 从床上扔出来读和写,几个部分可以同时读和写。

      Kafka 消息日志文件已保存

      • 00000000000000000000.log

        此文件保存信件。 默认情况下, 文件中保存的信件将保存七天, 之后将删除 。

      • __consumer_offsets-49

        在内部,卡夫卡是建造的。__consumer_offsets该主题有50个分部,用来维持与消费消费主题的偏差,每个消费者将向卡夫卡的默认主题报告消费偏差。__consumer_offsets因此,卡夫卡将50个分区设定为默认设置,以提高主题的共性。

        • 提交到哪个分区

          使用散列函数hash(<Consumer Group ID>) % <__consumer_offsets 主题的分区数>

        • 提交到该主题的内容

          Key 为<Consumer Group ID>+<Topic>+<分区号>值是当前 Offset 值 。


      在卡夫卡的集群业务

      副本的概念

      该拷贝旨在为主题分区提供若干备份,卡夫卡群集中许多Brokers公司有一份作为领导人的复制件,其他则作为Flaster的复制件。

      见本专题:

      Leader Kafka 领导执行 Kafka 的写作和阅读操作。 领导负责将数据同步到 Flash 。 领袖挂断后, 主从不止一个追随者中选择新领袖 。
      Follower 收到队长的同步数据。
      Isr 同步和同步的节点被放置在 Isr 群集中。 如果节点在Isr 中的性能不好, 则会从 Isr 的收藏中删除 。

      在组群中,有几个经纪人可以组成,说明主题的分区(可分解到不同分区中的信息)有多少个,可以产生多份分区,不同副本保存在不同的经纪人中。

      关于消费类别如何按组群消费划分的具体细节

      • 为确保信息序列的顺序,只有消费者群体中的消费者才可以吃到一个Parition,然而,多个Partics的多种消费者消费总顺序得不到保证。
      • 消费者群体中的消费者人数由分割区数目决定,据了解,同一数目的消费者不会超过分割区的数目,因为更多的消费者消费的信息较少。
      • 如果消费者挂断,就会触发再平衡机制,让其他客户消费该部门。

      客户端 API

      依赖

      生产者

      制作者之间信件同步

      如果制片人拿不到Ack, 3秒的时间会被堵住, 如果没有收到信息, 测试会重复三次 。

      生产商的加速器发送信息。

      这是一个生产者在发送信息后可以逐步完成的过程, 经纪人使用生产者收到信息后提供的回召方法。

      制制器器 Ack 配置配置

      Ack目前有三个组合:

      • ack=0

        Kafka群组并不要求Broker提供任何信息,而是立即返回Ack供制片人使用。 最容易失去消息的是最有效的消息。

      • ack=1(默认)

        领导人从许多副本中收集了信息,并将其记录在本地日志上,然后返回Ack给生产者。 表现和安全是最平衡的。

      • ack=-1/ack=all

        有配置min.insync.replicas=2(默认为 1,2) 大于或等于推荐配置,此时 领袖和斯托马必须同步这是重新连接Ack和制片人的唯一方法目前,该组的两名经纪人已完成了接收数据的工作。这种方式最安全,但性能最差。

      以下描述如何配置 Ack 并重试( 如果没有收到 Ack 则开始重试 ) :

      信息传输缓冲区

      • 默认情况下, Kafka 创建一个32米大小的缓冲, 以保持信件发送 。
      • 一旦进入缓冲区,Kafka当地线路将发送16千字节给Broker。
      • 如果线条不拉动 16k 数据, 间隔 10ms 将会传送被拉动到 Broker 的数据 。

      消费者

      关于自动和人工提交消费者材料

      提交的内容

      消费者必须自动或人工向消费组别提供关于消费组别+消费专题+消费分区+消费偏向的信息。__consumer_offsets主题里面。

      自动提交

      消费者poll信息一收到,即自动提交,因为客户在消费前提交,而且可能在消费前死亡,因此自动提交将失去信息。

      手动提交

      手工提交文件又进一步细分为两类:

      • 手动同步提交

        在使用该电文后,呼吁同步提交,阻止该组返回阿克山,返回阿克山,表示成功提交,然后是执行逻辑。

      • 手动异步提交

        不需要等到电文在消费后提交后才提交时再等待Ack群组,直接执行的逻辑允许对集束电话采用背对背技术。

      长轮询poll消息

      消费者默认开会一次。poll500个信息。 代码设置了以100毫秒为单位的长回合查询, 这意味着 :

      • 如果一次poll可以直接处决多达500人。for循环
      • 如果这一次没有poll延长的一轮调查继续进行,每秒500次。poll要么500毫秒 要么一秒钟
      • 如果两次poll这还不到500秒,而且只有1秒,所以马上开始吧。for循环

      如果两次poll如果间隔超过30秒,该组群将认为消费者消费疲软,消费者将被排出消费者群体,启动再平衡进程,从而产生性能成本。poll的消息少一点:

      消费者健康检查

      消费者每一秒钟向卡夫卡集群传输心跳,如果有超过10秒钟的非更新消费者,他们将被踢出消费者群体,触发消费者群体再平衡机制,并将分部门移交给该组的其他消费者消费。

      所有分区、抵消和时间消耗都具体列明。

      • 指定分区消费
      • 规定了消费的偏移。
      • 指定时间消费

        跳转到基于时间的所有分区, 以计算与 offset 对应的时间, 然后跳到所有分区, 在信件开始消耗后发现 offset 。

      新的消费群体消费扣除条例

      开始后, 新的消费群体中的消费者将默认于当前分区的最新信息 。offset + 1这是消费的开始(新消费新闻)。以下配置允许新鲜消费者第一次从零开始消费,然后开始消费新信息。

      • latest(默认)

        消费新消息。

      • earliest

        第一次消费始于开始,第二次消费始于开始。consumer.seekToBeginning()(每次消费开始。 )


      春靴,用卡夫卡

      依赖

      配置文件

      • application.properties

        RECORD 当一个消费者监听设备 处理每个记录。
        BATCH 当每一批poll在消费者监听设备分析后发送的数据
        TIME 当每一批poll提交时间比消费者监听设备处理数据的时间长。ack-time时提交
        COUNT 当每一批poll消费者听众处理的数据数量高于或等于处理的记录数量。ack-count时提交
        COUNT_TIME TIMECOUNT当符合一项标准时,即提交划界案。
        MANUAL 当每一批poll数据由消费者电线处理后人工调用。Acknowledgment.acknowledge()后提交
        MANUAL_IMMEDIATE 手动调用Acknowledgment.acknowledge()后立即提交

      生产者

      消费者

      配置消费者主题、分区和抵消。


      Kafka集群的主计长、再平衡和硬件

      Controller

      在东开业时,每个经纪商将建立一个与ZK的临时序列号节点,一个序列号最少的节点将作为该组的主计长,负责:

      • 当该组内有副本的领袖去世时,该组内必须选举一名新领袖,选举规则则从左侧Isr收藏中收回。
      • 当一个中间商被添加或从集群中移除时,承包商将把信息同步到其他中间商。
      • 由于集群中的分区被增加或删除,承包者将与其他中间商同步提供信息。

      重新平衡机制

      前提

      消费者群体中的客户没有确定他们想要消费的分区。

      触发的条件

      随着客户和消费者群体划分之间的联系发生变化,

      分区分配的策略

      • Range

        根据公司的统计数字 每个顾客有多少分部门被吃掉<分区总数> / (<消费者数量> + 1),之后的消费者是<分区总数> / <消费者数量>

      • 轮询

      • Sticky

        如果需要调整战略,将按事先分配的方式进行调整,不会修改先前的分配,如果没有战略,将进行全面重新分配。

      HW 和 LEO

      高水位有时被称为HW(高水印)。在分隔区对应的一组Isr 中选择最低低地(LOV-end-OFFSET)为 HW,然后乘以消费者只能消费到HW的所在地。在其他复制品中,HW都存在。领导人和Fowler各自负责不断更新其HW地位。

      消费者无法立即消耗领袖的新书写信息, 领袖将等待消息与伊斯尔所有集会的 Reolicas 同步, 以便更新HW,

      这保证了如果领导人的经纪人失败,仍然可以从新当选的领导人那里获得信息,防止信息丢失。


      Kafka 优化问题

      如何防止消息丢失

      生产者

      1. 使用同步发送。
      2. 把 Ack 设为1或者all,以及配置同步分区(min.insync.replicas)为分区备份数。

      消费者

      1. 应使用人工提交而不是自动提交。

      如何防止重复消费

      在信息预防方案中,如果信息被发出, 制作人将被允许再次这样做 。因为网络抖动,没有收到 Ack,另一方面,Broker得到了一些信息。制造者将在此情景下再次尝试。因此,经纪人收到了许多相同的信息。它还导致消费者经常使用。

      解决方案

      • 生产者关闭重试

        这将导致失去信息,而不是失去律师。

      • 消费者提供的非消费消费替代品

        带有独特或分布式商业身份证的锁。

      如何以正确的消费顺序获得电文

      1. Ack 设定非 0 值,以确保信件按顺序处理,在使用同步发布时不丢失任何信件。
      2. 主题只能是分割,消费群体只能有一个消费者。

      如何处理信息积压问题

      好消息是,消费速度远远低于生产速度。因此,卡夫卡的大部分数据没有利用。由于更多的数据是在没有使用的情况下收集的,消费者的定位能力正在下降,消费者的定位能力也在下降。因此,卡夫卡对外部世界的服务一直很差。因此,获得其他服务变得更加困难。造成服务雪崩。

      解决方案

      • 该消费者采用多种追踪方法,充分利用机器表演提供消费者信息。
      • 通过实施业务架构,提高业务一级的消费业绩。
      • 建立消费者群体、消费者、部署到其他计算机、作为一个群体消费、促进消费者消费。
      • 为了建立消费者,消费者在卡夫卡产生了另一个主题,有一个以上的部门和一个以上的消费者。poll新闻的到来,没有消费,而是直接转向新的主题。 此时此刻,新主题的不同次区域的许多消费者开始共同消费。

      如何实现延时队列

      应用场景

      当定单订立且30分钟以上未付款时,必须取消购买,这可以通过一个时滞完成。

      解决方案

      1. 在 Kafka 创建多个主题, 每个主题代表一个延迟间隔, 例如 。topic_30m
      2. 发送者将信息传送给适当的主题,并传送到发送时。
      3. 客户订阅相应的主题,在整个主题期间花费大量时间要求提供信息。
        • 确定消费传输时间和当前时间的当前比较是否超过预定值,例如30分钟。
        • 如果达到限制,则前往数据库,并更改顺序状态以取消。
        • 否则,记录最新新闻的Offest的讯息将停止消费,Offset未来消费的讯息将继续评判。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/15760.html

          热门文章

          文章分类