当前位置: 首页 > news >正文

介绍湛江网站个人博客网站备案

介绍湛江网站,个人博客网站备案,软件工程的就业前景和就业方向,如何设计一个logoKafka介绍 ChatGPT对于Apache Kafka的介绍#xff1a; Apache Kafka是一个分布式流处理平台#xff0c;最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统#xff0c;可以快速地处理高吞吐…Kafka介绍 ChatGPT对于Apache Kafka的介绍 Apache Kafka是一个分布式流处理平台最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统可以快速地处理高吞吐量的数据流并将数据实时地分发到多个消费者中。Kafka消息系统由多个broker服务器组成这些broker可以在多个数据中心之间分布式部署以提供高可用性和容错性。 Kafka的基本架构由生产者、消费者和主题topic组成。生产者可以将数据发布到指定的主题而消费者可以订阅这些主题并消费其中的数据。同时Kafka还支持数据流的处理和转换可以在管道中通过Kafka Streams API进行流式计算例如过滤、转换、聚合等。 Kafka使用高效的数据存储和管理技术能够轻松地处理TB级别的数据量。其优点包括高吞吐量、低延迟、可扩展性、持久性和容错性等。 Kafka在企业级应用中被广泛应用包括实时流处理、日志聚合、监控和数据分析等方面。同时Kafka还可以与其他大数据工具集成如Hadoop、Spark和Storm等构建一个完整的数据处理生态系统。 MQ的作用 MQMessageQueue消息队列。 队列是一种FIFO 先进先出的数据结构。消息则是跨进程传递的数据。一个典型的MQ系统会将消息消息由生产者发送到MQ进行排队然后根据一定的顺序交由消息的消费者进行处理。 主要作用 异步 异步能提高系统的响应速度、吞吐量。 解耦 1、服务之间进行解耦才可以减少服务之间的影响。提高系统整体的稳定性以及可扩展性。 2、另外解耦后可以实现数据分发。生产者发送一个消息后可以由一个或者多个消费者进行消费并且消费者的增加或者减少对生产者没有影响。 削峰 作用以稳定的系统资源应对突发的流量冲击。 为什么要用Kafka 典型日志聚合的应用场景 业务场景决定了产品的特点。 1、数据吞吐量很大 需要能够快速收集各个渠道的海量日志 2、集群容错性高允许集群中少量节点崩溃 3、功能不需要太复杂Kafka的设计目标是高吞吐、低延迟和可扩展主要关注消息传递而不是消息处理。所以Kafka并没有支持死信队列、顺序消息等高级功能。 4、允许少量数据丢失Kafka本身也在不断优化数据安全问题目前基本上可以认为Kafka可以做到不会丢数据。 Kafka快速上手 实验环境 准备三台CentOS7的虚拟机预备搭建三台机器的集群。分别配置机器名 worker1worker2worker3。 vi /etc/hosts192.168.146.128 worker1 192.168.146.129 worker2 192.168.146.130 worker3 关闭防火墙(实验环境建议关闭) firewall-cmd --state 查看防火墙状态 systemctl stop firewalld.service 关闭防火墙 补充虚拟机centos7遇到问题bash: jps: 未找到命令... 的解决方案 yum list *openjdk-devel* #安装适合自己的版本 yum install java-1.8.0-openjdk-devel.x86_64 #安装过程有几个同意步骤输入y安装完成测试jps ok 下载kafka地址Apache Kafka 选择kafka_2.13-3.4.0.tgz进行下载。 下载Zookeeper地址 Apache ZooKeeper 这里选择比较新的3.6.1版本。 下载完成后将这两个工具包上传到服务器上解压后分别放到/app/kafka和/app/zk目录下。并将部署目录下的bin目录路径配置到path环境变量中。 环境变量/etc/profile最终配置 export ZK_HOME/app/zk/apache-zookeeper-3.6.4-bin export KAFKA_HOME/app/kafka/kafka_2.13-3.4.0 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk export PATH$KAFKA_HOME/bin:$ZK_HOME/bin:$JAVA_HOME/bin:$PATH export CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 单机服务体验 1、启动Kafka之前需要先启动Zookeeper。 #解压命令 tar zxvf apache-zookeeper-3.6.4-bin.tar.gz tar zxvf kafka_2.13-3.4.0.tgz#这里用Kafka自带的Zookeeper启动脚本 cd kafka_2.13-3.4.0/ nohup bin/zookeeper-server-start.sh config/zookeeper.properties 通过jps指令看到一个QuorumPeerMain进程确定服务启动成功。zk默认启动在2181端口 启动遇到问题可以查看nohup.out日志文件注意脚本的执行权限 2、启动Kafka nohup bin/kafka-server-start.sh config/server.properties 启动完成后使用jps指令看到一个kafka进程确定服务启动成功。服务默认9092端口 3、简单收发消息 Kafka的基础工作机制消息发送者将消息发送到kafka上指定的topic消息消费者从指定的topic上消费消息。 简单收到命令 #创建Topic bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 #查看Topic bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092 #启动一个消息发送者端往一个名为test的Topic发送消息 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test #启动一个消息接收者端接收名为test的Topic消息 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test 生产者端示例 消费者端示例 注意消费者启动命令执行后有几秒钟延迟启动中接收不到消息默认处理启动成功后接收到的消息 4、其他消费模式 指定消费进度 #通过--from-beginning消费之前发的消息 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test #指定从哪一条消息开始消费offset表示索引/偏移量索引4也就是第五条消息开始0号partition bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --partition 0 --offset 4 --topic test 分组消费 kafka中的同一条消息只能被同一个消费者组下的某一个消费者消费。而不属于同一个消费者组的其他消费者也可以消费到这一条消息。通过--consumer-property group.idtestGroup指定消费者组 #两个消费者实例属于同一个消费者组 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.idtestGroup --topic test bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.idtestGroup --topic test #这个消费者实例属于不同的消费者组 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.idtestGroup2 --topic test 查看消费者组的偏移量 #查看消费者组的情况包括消费进度。 bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group testGroup···命令输出结果示例 Consumer group testGroup has no active members. #没有活跃消费者GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID testGroup test 0 20 20 0 ... ... ... ···描述 PARTITION 分区 CURRENT-OFFSET 当前消费进度 LOG-END-OFFSET 日志种最大消息进度 LAG 未消费消息数 虽然业务上是通过Topic来分发消息的但是实际上消息是保存在Partition这样一个数据结构上 理解Kakfa的消息传递机制 Kafka的消息发送者和消息消费者通过Topic这样一个逻辑概念来进行业务沟通。但是实际上所有的消息是存在服务端的Partition这样一个数据结构当中的。 客户端Client 包括消息生产者和消息消费者。 消费者组每个消费者可以指定一个所属的消费者组相同消费者组的消费者共同构成一个逻辑消费者组。每一个消息会被多个感兴趣的消费者组消费但是在每一个消费者组内部一个消息只会被消费一次。 服务端Broker一个Kafka服务器就是一个Broker。 话题Topic这是一个逻辑概念一个Topic被认为是业务含义相同的一组消息。客户端都通过绑定Topic来生产或者消费自己感兴趣的话题。 分区PartitionTopic只是一个逻辑概念而Partition就是实际存储消息的组件。每个Partiton就是一个queue队列结构。所有消息以FIFO先进先出的顺序保存在这些Partition分区中。 Kafka集群服务 为什么要用集群 单机服务下Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是在实际工作中使用时单机搭建的Kafka会有很大的局限性。 一方面消息太多需要分开保存。Kafka是面向海量消息设计的一个Topic下的消息会非常多单机服务很难存得下来。这些消息就需要分成不同的Partition分布到多个不同的Broker上。这样每个Broker就只需要保存一部分数据。这些分区的个数就称为分区数。 另一方面服务不稳定数据容易丢失。单机服务下如果服务崩溃数据就丢失了。为了保证数据安全就需要给每个Partition配置一个或多个备份保证数据不丢失。Kafka的集群模式下每个Partition都有一个或多个备份。Kafka会通过一个统一的Zookeeper集群作为选举中心给每个Partition选举出一个主节点Leader其他节点就是从节点Follower。主节点负责响应客户端的具体业务请求并保存消息。而从节点则负责同步主节点的数据。当主节点发生故障时Kafka会选举出一个从节点成为新的主节点。 最后Kafka集群中的这些Broker信息包括Partition的选举信息都会保存在额外部署的Zookeeper集群当中这样kafka集群就不会因为某一些Broker服务崩溃而中断。 Kafka集群架构 1、部署Zookeeper集群 Zookeeper是一种多数同意的选举机制允许集群中少半数节点出现故障。因此在搭建集群时通常采用奇数节点这样可以最大化集群的高可用特性。 先将下载下来的Zookeeper解压到/app/zk目录。 然后进入conf目录修改配置文件。在conf目录中提供了一个zoo_sample.cfg示例文件。只需要将这个文件复制一份zoo.cfg并修改其中的关键配置 #Zookeeper的本地数据目录默认是/tmp/zookeeper。这是Linux的临时目录随时会被删掉。 dataDir/app/zk/data #Zookeeper的服务端口 clientPort2181 #集群节点配置 server.1192.168.146.128:2888:3888 server.2192.168.146.129:2888:3888 server.3192.168.146.130:2888:3888 clientPort 2181是对客户端开放的服务端口。 集群配置部分 server.x这个x就是节点在集群中的myid。后面的2888端口是集群内部数据传输使用的端口。3888是集群内部进行选举使用的端口。 zookeeper启动时data目录会自动创建但是需要手动在data目录下面添加一个myid文件 #启动服务 bin/zkServer.sh --config conf start #查看服务状态 bin/zkServer.sh status 2、部署Kafka集群 kafka服务并不需要进行选举因此也没有奇数台服务的建议。 首先将Kafka解压到/app/kafka目录下然后进入config目录修改server.properties。重点关注的配置 #broker 的全局唯一编号不能重复只能是数字。 broker.id0 #数据文件地址。同样默认是给的/tmp目录。 log.dirs/app/kafka/logs #默认的每个Topic的分区数 num.partitions1 #zookeeper的服务地址 zookeeper.connectworker1:2181,worker2:2181,worker3:2181 多个Kafka服务注册到同一个zookeeper集群上的节点会自动组成集群。 server.properties文件中比较重要的核心配置 PropertyDefaultDescriptionbroker.id0broker的“名字”你可以选择任意你喜欢的数字作为id只要id是唯每个broker都可以用一个唯一的非负整数id进行标识这个id可以作为一的即可。log.dirs/tmp/kafka-logskafka存放数据的路径。这个路径并不是唯一的可以是多个路径之间只需要使用逗号分隔即可每当创建新partition时都会选择在包含最少partitions的路径下进行。listenersPLAINTEXT://127.0.0.1:9092server接受客户端连接的端口ip配置kafka本机ip即可zookeeper.connectlocalhost:2181zookeeper连接地址。hostname:port。如果是Zookeeper集群用逗号连接。log.retention.hours168每个日志文件删除之前保存的时间。num.partitions1创建topic的默认分区数default.replication.factor1自动创建topic的默认副本数量min.insync.replicas1当producer设置acks为-1时min.insync.replicas指定replicas的最小数目必须确认每一个repica的写数据都是成功的如果这个数目没有达到producer发送消息会产生异常delete.topic.enablefalse是否允许删除主题 启动服务 bin/kafka-server-start.sh -daemon config/server.properties 理解服务端的Topic、Partition和Broker # 创建一个分布式的Topic bin/kafka-topics.sh --bootstrap-server worker1:9092 --create --replication-factor 2 --partitions 4 --topic disTopic # 列出所有的Topic bin/kafka-topics.sh --bootstrap-server worker1:9092 --list # 查看列表情况 bin/kafka-topics.sh --bootstrap-server worker1:9092 --describe --topic disTopic 这里硬件资源有限只启动了两台上面截图 1、--create创建集群可以指定一些补充的参数。大部分的参数都可以在配置文件中指定默认值。 partitons参数表示分区数这个Topic下的消息会分别存入这些不同的分区中。 replication-factor表示每个分区有几个备份。 2、--describe查看Topic信息。 partiton参数列出了四个partition后面带有分区编号用来标识这些分区。 Leader表示这一组partiton中的Leader节点是哪一个。这个Leader节点就是负责响应客户端请求的主节点。从这里可以看到Kafka中的每一个Partition都会分配Leader也就是说每个Partition都有不同的节点来负责响应客户端的请求。这样就可以将客户端的请求做到尽量的分散。 Replicas参数表示这个partition的多个备份是分配在哪些Broker上的。也称为AR。这里的0,1就对应配置集群时指定的broker.id。但是Replicas列出的只是一个逻辑上的分配情况并不关心数据实际是不是按照这个分配。甚至有些节点服务挂了之后Replicas中也依然会列出节点的ID。 ISR参数表示partition的实际分配情况。他是AR的一个子集只列出那些当前还存活能够正常同步数据的那些Broker节点。 之前在配置Kafka集群时指定了一个log.dirs属性指向了一个服务器上的日志目录。进入这个目录就能看到每个Broker的实际数据承载情况。 Kafka当中Topic是一个数据集合的逻辑单元。同一个Topic下的数据实际上是存储在Partition分区中的Partition就是数据存储的物理单元。而Broker是Partition的物理载体这些Partition分区会尽量均匀的分配到不同的Broker机器上。offset就是每个消息在partition上的偏移量。 Kafka为何要这样来设计Topic、Partition和Broker的关系呢 1、Kafka设计需要支持海量的数据而这样庞大的数据量一个Broker是存不下的。那就拆分成多个Partition每个Broker只存一部分数据。这样极大的扩展了集群的吞吐量。 2、每个Partition保留了一部分的消息副本如果放到一个Broker上就容易出现单点故障。所以就给每个Partition设计Follower节点进行数据备份从而保证数据安全。另外多备份的Partition设计也提高了读取消息时的并发度。 3、在同一个Topic的多个Partition中会产生一个Partition作为Leader。这个Leader Partition会负责响应客户端的请求并将数据往其他Partition分发。 Kafka集群的整体结构 1、Topic是一个逻辑概念Producer和Consumer通过Topic进行业务沟通。 2、Topic并不存储数据Topic下的数据分为多组Partition尽量平均的分散到各个Broker上。每组Partition包含Topic下一部分的消息。每组Partition包含一个Leader Partition以及若干个Follower Partition进行备份每组Partition的个数称为备份因子 replica factor。 3、Producer将消息发送到对应的Partition上然后Consumer通过Partition上的Offset偏移量记录自己所属消费者组Group在当前Partition上消费消息的进度。 4、Producer发送给一个Topic的消息会由Kafka推送给所有订阅了这个Topic的消费者组进行处理。但是在每个消费者组内部只会有一个消费者实例处理这一条消息。 5、最后Kafka的Broker通过Zookeeper组成集群。然后在这些Broker中需要选举产生一个担任Controller角色的Broker。这个Controller的主要任务就是负责Topic的分配以及后续管理工作。在我们实验的集群中这个Controller实际上是通过ZooKeeper产生的。 Kraft集群--了解 Kraft集群简介 Kraft是Kafka从2.8.0版本开始支持的一种新的集群架构方式。其目的主要是为了摆脱Kafka对Zookeeper的依赖。因为以往基于Zookeeper搭建的集群增加了Kafka演进与运维的难度逐渐开始成为Kakfa拥抱云原生的一种障碍。使用Kraft集群后Kafka集群就不再需要依赖Zookeeper将之前基于Zookeeper管理的集群数据转为由Kafka集群自己管理。 虽然官方规划会在未来完全使用Kraft模式代替现有的Zookeeper模式但是目前来看Kraft集群还是没有Zookeeper集群稳定所以现在大部分企业还是在使用Zookeeper集群。 2022年10月3日发布的3.3.1版本才开始将KRaft标注为准备用于生产。KIP-833: Mark KRaft as Production Ready。 这离大规模使用还有比较长的距离。 实际上Kafka摆脱Zookeeper是一个很长的过程。在之前的版本迭代过程中Kafka就已经在逐步减少Zookeeper中的数据。在Kafka的bin目录下的大量脚本早期都是要指定zookeeper地址后续长期版本更迭过程中逐步改为通过--bootstrap-server参数指定Kafka服务地址。到目前版本基本所有脚本都已经抛弃了--zookeeper参数了。 传统的Kafka集群会将每个节点的状态信息统一保存在Zookeeper中并通过Zookeeper动态选举产生一个Controller节点通过Controller节点来管理Kafka集群比如触发Partition的选举。而在Kraft集群中会固定配置几台Broker节点来共同担任Controller的角色各组Partition的Leader节点就会由这些Controller选举产生。原本保存在Zookeeper中的元数据也转而保存到Controller节点中。 Raft协议是目前进行去中心化集群管理的一种常见算法类似于之前的Paxos协议是一种基于多数同意从而产生集群共识的分布式算法。Kraft则是Kafka基于Raft协议进行的定制算法。 新的Kraft集群相比传统基于Zookeeper的集群有一些很明显的好处 Kafka可以不依赖于外部框架独立运行。这样减少Zookeeper性能抖动对Kafka集群性能的影响同时Kafka产品的版本迭代也更自由。 Controller不再由Zookeeper动态选举产生而是由配置文件进行固定。这样比较适合配合一些高可用工具来保持集群的稳定性。 Zookeeper的产品特性决定了他不适合存储大量的数据这对Kafka的集群规模(确切的说应该是Partition规模)是极大的限制。摆脱Zookeeper后集群扩展时元数据的读写能力得到增强。 不过由于分布式算法的复杂性。Kraft集群和同样基于Raft协议定制的RocketMQ的Dledger集群一样都还不太稳定在真实企业开发中用得相对还是比较少。 配置Kraft集群 在Kafka的config目录下提供了一个kraft的文件夹在这里面就是Kraft协议的参考配置文件。在这个文件夹中有三个配置文件broker.propertiescontroller.propertiesserver.properties分别给出了Kraft中三种不同角色的示例配置。 broker.properties数据节点 controller.propertiesController控制节点 server.properties即可以是数据节点又可以是Controller控制节点。 这里同样列出几个比较关键的配置项按照自己的环境定制。 #配置当前节点的角色。Controller相当于Zookeeper的功能负责集群管理。Broker提供具体的消息转发服务。 process.rolesbroker,controller #配置当前节点的id。与普通集群一样要求集群内每个节点的ID不能重复。 node.id1 #配置集群的投票节点。其中前面的是节点的id后面是节点的地址和端口这个端口跟客户端访问的端口是不一样的。通常将集群内的所有Controllor节点都配置进去。 controller.quorum.voters1worker1:9093,2worker2:9093,3worker3:9093 #Broker对客户端暴露的服务地址。基于PLAINTEXT协议。 advertised.listenersPLAINTEXT://worker1:9092 #Controller服务协议的别名。默认就是CONTROLLER controller.listener.namesCONTROLLER #配置监听服务。不同的服务可以绑定不同的接口。这种配置方式在端口前面是省略了一个主机IP的主机IP默认是使用的java.net.InetAddress.getCanonicalHostName() listenersPLAINTEXT://:9092,CONTROLLER://:9093 #数据文件地址。默认配置在/tmp目录下。 log.dirs/app/kafka/kraft-log #topic默认的partition分区数。 num.partitions2 将配置文件分发并修改每个服务器上的node.id属性和advertised.listeners属性。 由于Kafka的Kraft集群对数据格式有另外的要求所以在启动Kraft集群前还需要对日志目录进行格式化。 [rootworker1 kafka_2.13-3.4.0]# bin/kafka-storage.sh random-uuid vRqZXTz0QT6FJKmeyEU7Yw [rootworker1 kafka_2.13-3.4.0]# bin/kafka-storage.sh format -t vRqZXTz0QT6FJKmeyEU7Yw -c config/kraft/server.properties Formatting /tmp/kraft-combined-logs with metadata.version 3.4-IV0. -t 表示集群ID三个服务器上可以使用同一个集群ID。 接下来就可以指定配置文件启动Kafka的服务了。 例如在Worker1上启动Broker和Controller服务。 bin/kafka-server-start.sh -daemon config/kraft/server.properties 等三个服务都启动完成后就可以像普通集群一样去创建Topic并维护Topic的信息了。
http://www.zqtcl.cn/news/530684/

相关文章:

  • 淘宝客购物网站源码网站项目开发的一般流程
  • 如何更改公司网站内容网站开发需要哪些文档
  • 洛阳建设工程网站宁波led网站建设
  • 五莲网站建设报价wordpress dux 5.3
  • 怎样做当地网站推广做电商要关注哪些网站
  • 安徽鸿顺鑫城建设集团网站设计外贸英文网站
  • 浦口区教育局网站集约化建设南京淄博网站建设方案
  • 学校网站建设的风险分析wordpress侧边栏显示单个分类列表
  • php网站安装图解帮别人建设网站多少利润
  • vs做的网站如何二手优品哪个网站做
  • 建设银行内部网站6建筑学院官网
  • 大学生做微商网站金华seo扣费
  • 以前老网站邯郸推广网络宣传哪家好
  • 网站建设技术网站建设奉节网站建设公司
  • 动漫视频网站模板动漫制作专业什么电脑最适合
  • 合网站建设注册一个500万的公司需要多少钱
  • 《网站推广策划》wordpress 写博客
  • 网站开发工程师面试问哪些问题免费下载软件商店安装
  • 建网站公司要钱吗公司制作网站跟企业文化的关系
  • 网站改版对用户的影响网站评论怎么做的
  • 许昌市做网站公司汉狮价格装修案例图片 效果图
  • 设计主题网站化肥厂的网站摸板
  • 做羊水亲子鉴定网站网络推广是啥
  • 怎样解析网站域名用哪个网站做首页比较好
  • 设计网站页面设计wordpress样式错乱
  • 静态网页模板免费网站wordpress悬浮按钮
  • 怎么制作学校网站大淘客网站代码
  • 如何做好一个网站wordpress 修改邮箱设置
  • 网站项目方案生态建设研究所网站
  • 用织梦做视频网站wordpress文章不能分段