范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

3分钟带你彻底搞懂Kafka

  一、认识kafka
  Kafka到底是个啥?用来干嘛的?
  官方定义如下:
  Kafka is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.
  翻译过来,大致的意思就是,这是一个实时数据处理系统,可以横向扩展,并高可靠!
  实时数据处理 ,从名字上看,很好理解,就是将数据进行实时处理,在现在流行的微服务开发中,最常用实时数据处理平台有 RabbitMQ、RocketMQ 等消息中间件。
  这些中间件,最大的特点主要有两个:  服务解耦  流量削峰
  在早期的 web 应用程序开发中,当请求量突然上来了时候,我们会将要处理的数据推送到一个队列通道中,然后另起一个线程来不断轮训拉取队列中的数据,从而加快程序的运行效率。
  但是随着请求量不断的增大,并且队列通道的数据一致处于高负载,在这种情况下,应用程序的内存占用率会非常高,稍有不慎,会出现内存不足,造成程序内存溢出,从而导致服务不可用。
  随着业务量的不断扩张,在一个应用程序内,使用这种模式已然无法满足需求,因此之后,就诞生了各种消息中间件,例如 ActiveMQ、RabbitMQ、RocketMQ等中间件。
  采用这种模型,本质就是将要推送的数据,不在存放在当前应用程序的内存中,而是将数据存放到另一个专门负责数据处理的应用程序中,从而实现服务解耦。
  消息中间件 :主要的职责就是保证能接受到消息,并将消息存储到磁盘,即使其他服务都挂了,数据也不会丢失,同时还可以对数据消费情况做好监控工作。
  应用程序 :只需要将消息推送到消息中间件,然后启用一个线程来不断从消息中间件中拉取数据,进行消费确认即可!
  引入消息中间件之后,整个服务开发会变得更加简单,各负其责。
  Kafka 本质其实也是消息中间件的一种,Kafka 出自于 LinkedIn 公司,与 2010 年开源到 github。
  LinkedIn 的开发团队,为了解决数据管道问题,起初采用了 ActiveMQ 来进行数据交换,大约是在 2010 年前后,那时的 ActiveMQ 还远远无法满足 LinkedIn 对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,LinkedIn 决定研发自己的消息传递系统, Kafka 由此诞生 。
  在 LinkedIn 公司,Kafka 可以有效地处理每天数十亿条消息的指标和用户活动跟踪,其强大的处理能力,已经被业界所认可,并成为大数据流水线的首选技术。  二、架构介绍
  先来看一张图, 下面这张图就是 kafka 生产与消费的核心架构模型 !
  如果你看不懂这些概念没关系,我会带着大家一起梳理一遍!  Producer :Producer 即生产者,消息的产生者,是消息的入口 Broker :Broker 是 kafka 一个实例,每个服务器上有一个或多个 kafka 的实例,简单的理解就是一台 kafka 服务器,kafka cluster 表示集群的意思 Topic :消息的主题,可以理解为消息队列,kafka的数据就保存在topic。在每个 broker 上都可以创建多个 topic 。 Partition :Topic的分区,每个 topic 可以有多个分区,分区的作用是做负载,提高 kafka 的吞吐量。同一个 topic 在不同的分区的数据是不重复的,partition 的表现形式就是一个一个的文件夹 ! Replication :每一个分区都有多个副本,副本的作用是做备胎,主分区(Leader)会将数据同步到从分区(Follower)。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为 Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本 Message :每一条发送的消息主体。 Consumer :消费者,即消息的消费方,是消息的出口。 Consumer Group :我们可以将多个消费组组成一个消费者组,在 kafka 的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。同一个消费者组的消费者可以消费同一个topic的不同分区的数据,这也是为了提高kafka的吞吐量 ! Zookeeper :kafka 集群依赖 zookeeper 来保存集群的的元信息,来保证系统的可用性。
  简而言之,kafka 本质就是一个消息系统,与大多数的消息系统一样,主要的特点如下:  使用推拉模型将生产者和消费者分离  为消息传递系统中的消息数据提供持久性,以允许多个消费者  提供高可用集群服务,主从模式,同时支持横向水平扩展
  与 ActiveMQ、RabbitMQ、RocketMQ 不同的地方在于,它有一个**分区 Partition **的概念。
  这个分区的意思就是说,如果你创建的 topic 有5个分区,当你一次性向 kafka 中推 1000 条数据时,这 1000 条数据默认会分配到 5 个分区中,其中每个分区存储 200 条数据。
  这样做的目的,就是方便消费者从不同的分区拉取数据,假如你启动 5 个线程同时拉取数据,每个线程拉取一个分区,消费速度会非常非常快!
  这是 kafka 与其他的消息系统最大的不同!  2.1、发送数据
  和其他的中间件一样,kafka 每次发送数据都是向 Leader 分区发送数据,并顺序写入到磁盘,然后Leader 分区会将数据同步到各个从分区Follower ,即使主分区挂了,也不会影响服务的正常运行。
  那 kafka 是如何将数据写入到对应的分区呢?kafka中有以下几个原则:  1、数据在写入的时候可以指定需要写入的分区,如果有指定,则写入对应的分区  2、如果没有指定分区,但是设置了数据的key,则会根据key的值hash出一个分区  3、如果既没指定分区,又没有设置key,则会轮询选出一个分区  2.2、消费数据
  与生产者一样,消费者主动的去kafka集群拉取消息时,也是从 Leader 分区去拉取数据。
  这里我们需要重点了解一个名词: 消费组 !
  考虑到多个消费者的场景,kafka 在设计的时候,可以由多个消费者组成一个消费组,同一个消费组者的消费者可以消费同一个 topic 下不同分区的数据,同一个分区只会被一个消费组内的某个消费者所消费,防止出现重复消费的问题!
  但是不同的组,可以消费同一个分区的数据!
  你可以这样理解,一个消费组就是一个客户端,一个客户端可以由很多个消费者组成,以便加快消息的消费能力。
  但是,如果一个组下的消费者数量大于分区数量,就会出现很多的消费者闲置。
  如果分区数量大于一个组下的消费者数量,会出现一个消费者负责多个分区的消费,会出现消费性能不均衡的情况。
  因此,在实际的应用中,建议消费者组的 consumer 的数量与partition 的数量保持一致! 三、kafka 安装
  光说理论可没用,下面我们就以 centos7 为例,介绍一下 kafka 的安装和使用。
  kafka 需要 zookeeper 来保存服务实例的元信息,因此在安装 kafka 之前,我们需要先安装 zookeeper。  3.1、安装zookeeper
  zookeeper 安装环境依赖于 jdk,因此我们需要事先安装 jdk  # 安装jdk1.8 yum -y install java-1.8.0-openjdk
  下载zookeeper,并解压文件包  #在线下载zookeeper wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz  #解压 tar -zxvf zookeeper-3.4.12.tar.gz
  创建数据、日志目录  #创建数据和日志存放目录 cd /usr/zookeeper/ mkdir data mkdir log  #把conf下的zoo_sample.cfg备份一份,然后重命名为zoo.cfg cd conf/ cp zoo_sample.cfg zoo.cfg
  配置zookeeper  #编辑zoo.cfg文件 vim zoo.cfg
  重新配置 dataDir 和dataLogDir 的存储路径
  最后,启动 Zookeeper 服务  #进入Zookeeper的bin目录 cd zookeeper/zookeeper-3.4.12/bin  #启动Zookeeper ./zkServer.sh start  #查询Zookeeper状态 ./zkServer.sh status  #关闭Zookeeper状态 ./zkServer.sh stop 3.2、安装kafka
  到官网 http://kafka.apache.org/downloads.html 下载想要的版本,我这里下载是最新稳定版2.8.0 。 #下载kafka 安装包 wget https://apache.osuosl.org/kafka/2.8.0/kafka-2.8.0-src.tgz  #解压文件包 tar -xvf kafka-2.8.0-src.tgz
  按需修改配置文件 server.properties (可选) #进入配置文件夹 cd  kafka-2.8.0-src/config  #编辑server.properties vim server.properties
  server.properties 文件内容如下: broker.id=0 listeners=PLAINTEXT://localhost:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/tmp/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=168 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=localhost:2181 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0
  其中有四个重要的参数:  broker.id :唯一标识ID listeners=PLAINTEXT://localhost:9092 :kafka服务监听地址和端口 log.dirs :日志存储目录 zookeeper.connect :指定zookeeper 服务地址
  可根据自己需求修改对应的配置!  3.3、启动 kafka 服务# 进入bin脚本目录 cd  kafka-2.8.0-src/bin
  启动 kafka 服务  nohup kafka-server-start.sh ../config/server.properties server.log 2> server.err & 3.4、创建主题topics
  创建一个名为 testTopic 的主题,它只包含一个分区,只有一个副本: # 进入bin脚本目录 cd  kafka-2.8.0-src/bin  #创建topics kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testTopic
  运行 list topic 命令,可以看到该主题。 # 进入bin脚本目录 cd  kafka-2.8.0-src/bin  #查询当前kafka上所有的主题 kafka-topics.sh --list --zookeeper localhost:2181
  输出内容:  testTopic 3.5、发送消息
  Kafka 附带一个命令行客户端,它将从文件或标准输入中获取输入,并将其作为消息发送到 Kafka 集群。默认情况下,每行将作为单独的消息发送。
  运行生产者,然后在控制台中键入一些消息以发送到服务器。  # 进入bin脚本目录 cd  kafka-2.8.0-src/bin  #运行一个生产者,向testTopic主题中发消息 kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic
  输入两条内容并回车:  Hello kafka! This is a message 3.5、接受消息
  Kafka 还有一个命令行使用者,它会将消息转储到标准输出。  # 进入bin脚本目录 cd  kafka-2.8.0-src/bin  #运行一个消费者,从testTopic主题中拉取消息 kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testTopic --from-beginning
  输出结果如下:  Hello kafka! This is a message 四、小结
  本文主要围绕 kafka 的架构模型和安装环境做了一些初步的介绍,难免会有理解不对的地方,欢迎网友批评、吐槽。
  由于篇幅原因,会在下期文章中详细介绍 java 环境下 kafka 应用场景!

工信部装备工业一司组织召开支持新能源汽车加快发展座谈会为贯彻落实中共中央政治局会议精神,支持新能源汽车加快发展,8月26日上午,装备工业一司在京组织召开座谈会,听取行业企业意见建议。参会代表对新能源汽车产业发展形势和存在问题进行了深入渲染图细节配置价格再曝光iPadmini6已无秘密在今年,越来越多的手机厂商着力于平板电脑的打造,小米联想荣耀华为realme都发布了自家的平板电脑产品,据传OPPOvivo的平板也在路上了。其实如今平板的火爆也是大环境所导致的,邮寄顺丰丢件了怎么办?顺丰这些贴心服务保障为你降低损失回望电子商务与物流的发展与变迁,曾经许多被认为是新颖极致的体验如今都已成为常规模式,每天无数商品在网上下定,无数包裹在天网地网中穿梭运输,快递运输不仅为网购提供了极大便利,也深入人旗舰实力,中国自信!汉EV标准续航版豪华型硬核上市近日,比亚迪宣布,全球超安全智能新能源旗舰轿车汉EV加推标准续航版豪华型,新车型的NEDC综合工况纯电续驶里程达506公里,综合补贴后售价20。98万元,即日起接受预订,预计202vivoX70渲染图已发布后置矩阵三摄vivoX70的渲染图已经发布。据悉,该机海外版将搭载联发科天玑1200芯片,配备12GB存储,运行Android11,采用6。5英寸FHDAMOLED中间带孔直屏,后置矩阵三摄,尝鲜的代价越来越低,折叠屏手机似乎快熟了(魏德龄文)过去两年谈及折叠屏手机,尝鲜无疑才是它的最大卖点,毕竟在硬件的耐用性生态系统的成熟度,以及最基本的触控感受上,都远不及常规的智能手机。然而,随着近期一波新品发布浪潮的降华为超大曲率专利设计图曝光虽然华为因众所周知的原因,在量产与研发方面面临重重困难,但根据余承东在内的多位高管的表态来看,华为并不打算推出手机市场,而是继续研发新款机型。而在近日,一款华为超大曲率专利设计图被手机cpu评价1。苹果a系列的cpu是因为前几年安卓手机不行流畅才火起来的,我认为苹果手机是好,但是比如苹果12promax太责了,买一个红米k40不香吗?2。华为的麒麟cpu,我个人觉得华为不买了5G手机却不用5G?三大运营商统一要求,手机厂商做出调整根据中国信通院发布的最新报告显示,在2021年7月份,国内手机出货总量为2867。6万部,其中5G手机约为2283。4万部,占比达到了惊人的79。6。这意味着当前国内有80的用户,因发明专利被无效,三星起诉华为惨败诉伴随着智能手机在全球市场的崛起,国际巨头之间的专利大战在这几年似乎已经成为常态,各大手机厂商之间的竞争愈加激烈,专利纠纷也随之而来。最近在国内闹得沸沸扬扬的,就数华为无效三星专利一雷鸟FF1手机全新发布解锁顺滑无界新体验中国,深圳,2021年8月26日TCLMiniLED战略发布会于今天在深圳举行,TCL旗下子品牌雷鸟在发布会上隆重推出旗下第一款智能手机雷鸟FF1。围绕快意不限速,灵感不设限的产品
店老板,你的店是否也有类似的情况?快来看一看吧作为老板你有没有这样的感触实体店客流量少了,几乎没有客户?想做个活动,几乎没有人们来参与,甚至没有效果?守着店干着急,没有客户,员工都在玩手机,自己也没办法?我们分析下客流量少的主为什么说小程序是实体店老板最终的法宝?小程序,2021是商家必须做的理由在微信环境中,小程序更加轻量化,本身有着无需下载即用即走的特点,也拥有丰富的获客入口,用户可通过扫一扫附近的小程序搜一搜小程序卡片等方式进入小程序完全摆脱人工清扫,小洁扫地机器人,完美解决清扫痛点很多人对于扫地机器人的看法都是拖地不干净,还不能完全摆脱人力,让清灰从扫地,若是再碰上刷头卷上毛发和线缆的情况,还需要费时费力地动手清理。不仅会影响清洁效果,大家日常使用起来也会感人工智能将导致几亿人失业!将来会是什么样?基于当前技术的发展程度与合理推测,我认为在15年内,人工智能和自动化将具备取代4050岗位的技术能力。近期,知名人工智能专家创新工场CEO李开复公开发表了以上讲话,引起了极大的社会网络安全开发者人工智能已经成为新宝藏AI在安全方面的角色对白帽黑客和网络罪犯都很有吸引力,但目前似乎还没有找到双方的平衡。人工智能已经成为网络安全开发者的新宝藏,这要归功于它的潜力,它不仅可以在很大的规模上实现功能自中国市场的人工智能,将引起一场技术革命目前,一场技术革命正席卷全球,抓住该机遇的国家将主宰21世纪。没有哪个领域对大众生活生计安全以及繁荣稳定的变革力比得上人工智能(AI)技术。人工智能将改变全球经济和国际关系的力量平人工智能与媒体将会擦出怎样的火花?人工智能未来在媒体领域能发挥怎样的作用?世界人工智能大会刚刚结束,人工智能与老百姓的日常生活也已经产生了非常密切的接触。同样地,人工智能在媒体这一领域,也可以做到很好的结合。人工智人工智能有望成为阿尔茨海默病的有效预防工具近日,科学家成功地训练了一种新的人工智能算法,以准确预测导致阿尔茨海默病的认知能力下降症状。据2015年世界阿尔茨海默病报告报道,全球约有4680万AD(阿尔茨海默病)患者,预计每人工智能机器人创新创业的思考及建议智能机器将出现拐点并在相关领域产生颠覆性影响关于智能机器人工智能和机器人技术之间的关系,可用一个公式进行表示智能机器人工智能(AI)机器人技术(robottechnology)。机人工智能乌托邦迪拜认为2071年人类应该这样生活!不同于硅谷老牌的科技力量,迪拜一直是独特的存在。他们日益崛起的科技实力正在被验证,无论是全面AI化的基础建设和城市治安力量,还是频频登上全球科技头条的机器人警察和空中出租车,迪拜试人工智能的偏好,究竟该怎么设定?人工智能强大继而改变世界的新故事暂时还没有。但是,伴随着各种可能性,危险也悄然到来。虽然我们应该为人工智能改变眼疾和诊断癌症的点子而振奋,抑或是为自动驾驶汽车可能带来的交通革命而高