zoukankan      html  css  js  c++  java
  • kafka学习(四)集群搭建及理论分析

    一、搭建一个本地伪集群

      前面我们学习了搭建单台kafka实例的步骤,现在为了方便,我们直接在本机windows系统上搭建我们的伪集群来方便我们学习,步骤如下:

    1、复制3份kafka实例

    2、分别修改3个brocker的配置文件【server.properties】内容

      PS:要把多个kafka实例组成集群,对应连接的zookeeper必须相同。【组建集群实际上只要zk地址配置一样就可以了】

      PS:内网间一般不配置SSL账号密码,因为如果配置了那么性能会下降。

    【kafka1】
    
    #broker实例ID
    broker.id=0
    #监听9092端口
    listeners=PLAINTEXT://:9092
    #数据存放路径
    log.dirs=/kafka/kafka1/zhlogs
    #kafka连接zookeeper的地址
    zookeeper.connect=localhost:2181
    
    【kafka2】
    
    #broker实例ID
    broker.id=1
    #监听9093端口
    listeners=PLAINTEXT://:9093
    #数据存放路径
    log.dirs=/kafka/kafka2/zhlogs
    #kafka连接zookeeper的地址
    zookeeper.connect=localhost:2181
    
    【kafka3】
    
    #broker实例ID
    broker.id=2
    #监听9094端口
    listeners=PLAINTEXT://:9094
    #数据存放路径
    log.dirs=/kafka/kafka3/zhlogs
    #kafka连接zookeeper的地址
    zookeeper.connect=localhost:2181

    3、分别启动3个brocker实例

    二、集群消费原理

      log的partitions分布在kafka集群中不同的broker上,每个broker可以请求备份其他broker上partition上的数据。

      针对每个partition,都有一个broker起到“leader”的作用,0个或多个其他的broker作为“follwers”的作用。

      leader处理所有的针对这个partition的读写请求,而followers被动复制leader的结果,不提供读写【主要是为了保证多副本数据与消费的一致性】。如果这个leader失效了,其中的一个follower将会自动的变成新的leader。

      PS:brocker之间是没有Leader和follower相关的概念的,只有到分区这个级别才有这个概念。

    Producers

      生产者将消息发送到topic中去,同时负责选择将message发送到topic的哪一个partition中。通过round­-robin做简单的负载均衡。也可以根据消息中的某一个关键字来进行区分。

    Consumers

    消息传递模式  

      传统的消息传递模式有2种:队列模式发布订阅模式

    • queue【队列模式】:多个consumer从服务器中读取数据,消息只会到达一个consumer。
    • publish-subscribe【发布订阅模式】:消息会被广播给所有的consumer。

    消费者组【consumer group】

      Kafka基于这2种模式提供了一种consumer的抽象概念:consumer group。

    • queue【队列模式】:所有的consumer都位于同一个consumer group下。
    • publish-subscribe【发布订阅模式】:consumer位于不同consumer group下。

      解析:

    • 上图由2个broker组成的kafka集群,某个主题总共有4个partition【分区0~分区3】,分别位于不同的broker上。
    • 这个集群由2个Consumer Group【消费者组】消费, A有2个消费者实例 ,B有4个。
    • 通常一个topic会有几个consumer group,每个consumer group都是一个逻辑上的订阅者( logical subscriber )。
    • 每个消费者组由多个消费者实例组成,从而达到可扩展和容灾的功能。

      消费顺序:

    一个partition同一个时刻在一个consumer group中只能有一个consumer instance【消费者实例】在消费,从而保证消费顺序。

    PS:消费者组中的消费者实例的数量不能比一个Topic中的partition的数量多,否则多出来的 consumer消费不到消息。

    PS:Kafka只在partition的范围内保证消息消费的局部顺序性不能在同一个topic中的多个partition中保证总的消费顺序性

  • 相关阅读:
    redis sentinel(哨兵)配置解读
    配置哨兵监控Redis运行情况
    java 客户端链接不上redis解决方案
    Redis配置主从架构,实现读写分离
    Redis简介,安装和配置,停止,卸载(图解方式)
    linux下监控用户的操作记录---录像播放性质
    Spring的数据库开发
    Spring中Bean的作用域、生命周期
    Spring中Bean的实例化
    Spring之初体验
  • 原文地址:https://www.cnblogs.com/riches/p/15479900.html
Copyright © 2011-2022 走看看