• 一、kafka概述


    1、定义

    kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要用于大数据实时处理领域

    2、消息队列

    1)传统消息队列的应用场景

    clipboard

    2)使用消息队列的好处

    ①、解耦

    ②、可恢复性

    系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所 以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

    ③、缓冲

    有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致 的情况

    ④、增加峰值处理能力(削峰)

    在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。 如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列 能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

    3)消息队列的两种方式

    ①、点对点模式

    一对一,消费者主动拉取数据,消息收到后清除消息

    消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。 消息被消费以后,queue 中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 Queue 支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

    clipboard

    ②、发布订阅模式

    一对多,消费者消费数据之后,不会清除消息

    消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消 息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费

    clipboard

    发布订阅模式分为两种

    一种是消费者主动拉取数据

    一种是队列侧主动推送数据

    kafka是消费者这边主动的去拉取数据

    缺点:消费者维持一个常轮询,去查看kafka中是否有新消息,比较浪费资源

    3、kafka的架构

    clipboard

    1)Producer:消息生产者,向kafka broker发送消息的客户端

    2)Consumer:消息消费者,向kafka取消息的客户端

    3)Consumer Group:消费者组,提高消费的并发,消费者最好的数量等于topic分区的数量

    4)Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。

    5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic

    6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上, 一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;

    目的是为了提高kafka集群的负载能力和并发,可以向多个分区写入消息

    7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本, 一个 leader 和若干个 follower。

    8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader

    9)follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据 的同步。leader 发生故障时,某个 follower 会成为新的 follower。

    10)Zookeeper:

    ①、所有的kafka broker会注册到Zookeeper,帮助kafka节点组成集群
    ②、记录kafka消费者消费消息的偏移量 (0.9版本之前offset存在zk , 0.9版本之后存在本地)
     
     

    4、总结

    1)多个kafka节点broker组成集群cluster
    2)kafka集群中拥有很多个topic,每个Topic含有各自的分区和副本
    3)生产者生产消息时,将消息发送到不同的分区,实现负载均衡
    4)一个消费者组只能有一个消费者消费topic中的一条消息
    5)生产者向topic的哪个分区发送消息,消费者消费哪个分区的消息,都是有分区分配策略的
     
     
     

  • 相关阅读:
    Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题。(转)
    Spring Boot 中初始化资源的几种方式(转)
    关于RedisTemplate和StringRedisTemplate(转)
    @PostConstruct
    Python % 格式化字符串
    逻辑回归模型
    python 常用内置函数
    HIVE: collect_set(输出未包含在groupby的字段);
    HDFS文件和HIVE表的一些操作
    Linux 传输文件
  • 原文地址:https://www.cnblogs.com/houchen/p/15192307.html
Copyright © 2020-2023  润新知