• Kafka快速入门------kafka的基础知识


    Kafka快速入门

    Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

    Kafka的使用场景

    • 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
    • 消息系统:解耦和生产者和消费者、缓存消息等。
    • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
    • 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

    Kafka基本概念

    kafka是一个分布式的,分区的消息(官方称之为commit log)服务。它提供一个消息系统应该具备的功能,但是确有着独特的设计。可以这样来说,Kafka借鉴了JMS规范的思想,但是确并没有完全遵循JMS规范。

    首先,让我们来看一下基础的消息(Message)相关术语:

    在这里插入图片描述
    因此,从一个较高的层面上来看,producer通过网络发送消息到Kafka集群,然后consumer来进行消费,如下图:
    在这里插入图片描述
    服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成。

    为什么使⽤消息队列

    使⽤同步的通信⽅式来解决多个服务之间的通信

    在这里插入图片描述
    存在的问题:

    • 造成的系统开销,响应的时间比较大的,2–5秒,用户体验感差
    • 在同步的过程中要保证每个服务都顺利完成,整个链路才执行完,因为网络等其他问题,整个链路执行完成的成功率会受到影响,导致用户体验感差
    • 同步的通信⽅式会存在性能和稳定性的问题。

    使⽤异步的通信⽅式

    在这里插入图片描述
    针对于同步的通信⽅式来说,异步的⽅式,可以让上游快速成功,极⼤提⾼了系统的吞吐
    量。⽽且在分布式系统中,通过下游多个服务的分布式事务的保障,也能保障业务执⾏之后
    的最终⼀致性。消息队列解决具体的是什么问题——通信问题。即便下游有任务失败也不影响最终是成功的。

    消息队列的流派

    ⽬前消息队列的中间件选型有很多种:

    • rabbitMQ:内部的可玩性(功能性)是非常强的

    • rocketMQ: 阿里内部一个大神,根据kafka的内部执行原理,手写的一个消息队列中间件。性能是与Kafka相比肩,除此之外,在功能上封装了更多的功能。

    • kafka:全球消息处理性能最快的一款MQ

    • zeroMQ

    这些消息队列中间件有什么区别?

    有broker

    • 重topic:Kafka、RocketMQ、ActiveMQ

      整个broker,依据topic来进行消息的中转。在重topic的消息队列里必然需要topic的存在

    • 轻topic:RabbitMQ

      topic只是一种中转模式。

    无broker

    在生产者和消费者之间没有使用broker,例如zeroMQ,直接使用socket进行通信。

    Kafka的安装

    • 部署一台zookeeper服务器
    • 安装jdk
    • 下载kafka的安装包:http://kafka.apache.org/downloads
    • 上传到kafka服务器上:/usr/local/kafka
    • 解压缩压缩包
    • 进入到config目录内,修改server.properties
    #broker.id属性在kafka集群中必须要是唯一
    broker.id=0
    #kafka部署的机器ip和提供服务的端口号
    listeners=PLAINTEXT://192.168.65.60:9092   
    #kafka的消息存储文件
    log.dir=/usr/local/data/kafka-logs
    #kafka连接zookeeper的地址
    zookeeper.connect=192.168.65.60:2181
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 进入到bin目录内,执行以下命令来启动kafka服务器(带着配置文件)
    ./kafka-server-start.sh -daemon ../config/server.properties 
    
    • 1
    • 校验kafka是否启动成功:

    进入到zookeeper内用ls指令查看是否有kafka的节点:/brokers/ids/0

    kafka中的一些基本概念

    kafka中有这么些复杂的概念
    在这里插入图片描述

    创建topic

    • 通过kafka命令向zk中创建一个主题
    ./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replication-factor 1 --partitions 1 --topic test
    
    • 1
    • 查看当前zk中所有的主题
    ./kafka-topics.sh --list --zookeeper 172.16.253.35:2181
    test
    
    • 1
    • 2

    发送消息

    把消息发送给broker中的某个topic,打开一个kafka发送消息的客户端,然后开始用客户端向kafka服务器发送消息

    ./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --topic test
    
    • 1

    消费消息

    打开一个消费消息的客户端,向kafka服务器的某个主题消费消息

    • 方式一:从当前主题中的最后一条消息的offset(偏移量位置)+1开始消费
    ./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --topic test
    
    • 1
    • 方式二:从当前主题中的第一条消息开始消费
    ./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --from-beginning --topic test
    
    • 1

    关于消息的细节

    在这里插入图片描述

    • 生产者将消息发送给broker,broker会将消息保存在本地的日志文件中
    /usr/local/kafka/data/kafka-logs/主题-分区/00000000.log
    
    • 1
    • 消息的保存是有序的,通过offset偏移量来描述消息的有序性
    • 消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置

    单播消息

    在一个kafka的topic中,启动两个消费者,一个生产者,问:生产者发送消息,这条消息是否同时会被两个消费者消费?

    如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的topic中的消息。换言之,同一个消费组中只能有一个消费者收到一个topic中的消息。

    ./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092  --consumer-property group.id=testGroup --topic test
    
    • 1

    多播消息

    不同的消费组订阅同一个topic,那么不同的消费组中只有一个消费者能收到消息。实际上也是多个消费组中的多个消费者收到了同一个消息。

    ./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092  --consumer-property group.id=testGroup1 --topic test
    ./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092  --consumer-property group.id=testGroup2 --topic test
    
    • 1
    • 2

    下图就是描述多播和单播消息的区别

    在这里插入图片描述

    查看消费组的详细信息

    通过以下命令可以查看到消费组的相信信息:

    ./kafka-consumer-groups.sh --bootstrap-server 172.16.253.38:9092 --describe --group testGroup
    
    • 1

    在这里插入图片描述

    重点关注以下几个信息:

    • current-offset: 最后被消费的消息的偏移量
    • Log-end-offset: 消息总量(最后一条消息的偏移量)
    • Lag:积压了多少条消息

    ref

    千峰教育

  • 相关阅读:
    Stable Diffusion WebUI中COMMANDLINE_ARGS参数配置说明
    matplotlib入门
    WordPress建站教程:10步快速搭建个人网站
    大数据HCIE成神之路之数学(2)——线性代数
    [COLING 2018] Modeling Semantics with Gated Graph Neural Networks for KBQA 阅读笔记
    【DesignMode】组合模式(composite mode)
    Java学习之SpringBoot项目打包成可执行jar
    flex:1详解,以及flex:1和flex:auto的区别
    win10怎么录屏?windows自带录屏功能怎么用
    什么是Helm?它是如何提升云原生应用私有化部署效率的
  • 原文地址:https://blog.csdn.net/weixin_45522528/article/details/126765670