• 消息队列_kafka简介


    Kafka简介

    kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理,既然是消息队列,那么kafka必然有消息队列通用的特性

    消息队列的优点

    • 解耦合:耦合的状态表示当你实现某个功能的时候,是直接接入当前接口,而利用消息队列,可以将相应的消息发送到消息队列,这样的话,如果接口出了问题,将不会影响到当前的功能

    • 异步处理:异步处理代替了之前的同步处理,异步处理不需要让整个流程走完就直接返回结果,可以将消息发送到消息队列中,然后返回结果,剩下让其他业务处理接口从消息队列中订阅消息消费处理即可
    • 流量削峰:大流量的时候,使用消息队列当做中间件可以将流量的高峰保存到消息队列中,从而防止了系统的高请求,减轻服务器的压力

    kafka消费模式

    kafka的消费模式有两种

    • 点对点:生产者生产消息到队列,消费者消费完队列里面即删除消息

    • 发布订阅:生产者发布消息到topic中,一个或者多个消费者订阅消息,消息会在topic中保留一段时间,然后再删除

    kafka基础架构

    Kafka像其他Mq一样,也有自己的基础架构,主要存在生产者Producer、Kafka集群Broker、消费者Consumer、注册消息Zookeeper

    • Producer:消息生产者,向Kafka中发布消息的角色。
    • Consumer:消息消费者,即从Kafka中拉取消息消费的客户端。
    • Consumer Group:消费者组,消费者组则是一组中存在多个消费者,消费者消费Broker中当
    • Topic的不同分区中的消息,消费者组之间互不影响,所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。某一个分区中的消息只能够一个消费者组中的一个消费者所消费
      Broker:经纪人,一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic。
    • Topic:主题,可以理解为一个队列,生产者和消费者都是面向一个Topic
    • Partition:分区,为了实现扩展性,一个非常大的Topic可以分布到多个Broker上,一个Topic可以分为多个Partition,每个Partition是一个有序的队列(分区有序,不能保证全局有序)
    • Replica:副本Replication,为保证集群中某个节点发生故障,节点上的Partition数据不丢失,Kafka可以正常的工作,Kafka提供了副本机制,一个Topic的每个分区有若干个副本,一个Leader和多个Follower
    • Leader:每个分区多个副本的主角色,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。
    • Follower:每个分区多个副本的从角色,实时的从Leader中同步数据,保持和Leader数据的同步,Leader发生故障的时候,某个Follower会成为新的Leader。
    上述一个Topic会产生多个分区Partition,分区中分为LeaderFollower,消息一般发送到LeaderFollower通过数据的同步与Leader保持同步,消费的话也是在Leader中发生消费,如果多个消费者,则分别消费Leader和各个Follower中的消息,当Leader发生故障的时候,某个Follower会成为主节点,此时会对齐消息的偏移量。
    
    • 1

    kafka的安装与使用

    docker:

    # docker直接拉取kafka和zookeeper的镜像
    docker pull wurstmeister/kafka
    docker pull wurstmeister/zookeeper 
    # 首先需要启动zookeeper,如果不先启动,启动kafka没有地方注册消息
    docker run -it --name zookeeper -p 12181:2181 -d wurstmeister/zookeeper:latest
    # 启动kafka容器,注意需要启动三台,注意端口的映射,都是映射到9092
    # 第一台
    docker run -it --name kafka01 -p 19092:9092 -d -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.233.129:12181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.233.129:19092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest
    # 第二台
    docker run -it --name kafka02 -p 19093:9092 -d -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=192.168.233.129:12181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.233.129:19093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest
    # 第三台
    docker run -it --name kafka03 -p 19094:9092 -d -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=192.168.233.129:12181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.233.129:19094 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    具体命令学习:

    # 创建topic名称为first,3个分区,1个副本
    ./kafka-topics.sh --zookeeper 192.168.233.129:12181 --create --topic first --replication-factor 1 --partitions 3
    # 查看first此topic信息
    ./kafka-topics.sh --zookeeper 192.168.233.129:12181 --describe --topic first
    Topic: first	PartitionCount: 3	ReplicationFactor: 1	Configs: 
    	Topic: first	Partition: 0	Leader: 2	Replicas: 2	Isr: 2
    	Topic: first	Partition: 1	Leader: 0	Replicas: 0	Isr: 0
    	Topic: first	Partition: 2	Leader: 1	Replicas: 1	Isr: 1
    # 调用生产者生产消息
    ./kafka-console-producer.sh --broker-list 192.168.233.129:19092,192.168.233.129:19093,192.168.233.129:19094 --topic first
    # 调用消费者消费消息,from-beginning表示读取全部的消息
    ./kafka-console-consumer.sh --bootstrap-server 192.168.233.129:19092,192.168.233.129:19093,192.168.233.129:19094 --topic first --from-beginning
    # 删除topic
    ./kafka-topic.sh --zookeeper 192.168.233.129:12181 --delete --topic second
    #删除的时候只是被标记为删除marked for deletion并没有真正的删除,如果需要真正的删除,需要再config/server.properties中设置delete.topic.enable=true
    #修改分区数
    ./kafka-topics.sh --zookeeper 192.168.233.129:12181 --alter --topic test2 --partitions 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    如何分析和优化慢sql语句
    【Window10 】删除‘设备和驱动器’中的百度网盘、酷狗音乐、迅雷下载等
    身为程序员,你很有必要了解一下JNPF
    利用大模型&知识图谱技术,告别繁重文案,实现非结构化数据高效管理
    MySQL作业:索引、视图、存储、函数
    【git】超详细使用指令
    hexo博客搭建
    工程项目进度控制的主要措施有哪些?
    Java常用类的使用
    Django之视图层
  • 原文地址:https://blog.csdn.net/weixin_44219219/article/details/126784427