首页 > 其他分享 > Kafka集群

Kafka集群

时间:2023-08-06 18:23:34浏览次数:25  
标签:队列 partition broker Kafka topic 集群 消息

Kafka集群使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,消息通讯等场景。

目录

1.Kafka 概述

2.消息队列好处

3.消息队列的模式

4.Kafka 的特性

5.Kafka 系统架构

6.部署 kafka 集群

7.总结

 

 

 

 

 

1.Kafka 概述

  1.消息队列背景   

    (1)主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。
    (2)我们使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,消息通讯等场景。

  2.类型

    当前比较常见的 MQ 中间件有 ActiveMQ、RabbitMQ、RocketMQ、Kafka 等。

  3.Kafka 定义

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

  4. Kafka 简介

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

 

2.消息队列好处

  1.消息队列好处

    (1)解耦
    允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

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

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

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

    (5)异步通信
    很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

 

3.消息队列的模式

   1.消息队列的模式

    (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)
    消息生产者生产消息发送到消息队列中,然后消息消费者从消息队列中取出并且消费消息。消息被消费以后,消息队列中不再有存储,所以消息消费者不可能消费到已经被消费的消息。消息队列支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

    (2)发布/订阅模式(一对多,又叫观察者模式,消费者消费数据之后不会清除消息)
    消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。
    发布/订阅模式是定义对象间一种一对多的依赖关系,使得每当一个对象(目标对象)的状态发生改变,则所有依赖于它的对象(观察者对象)都会得到通知并自动更新。

 

4.Kafka 的特性

  1.Kafka 的特性

   (1)高吞吐量、低延迟
    Kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。每个 topic 可以分多个 Partition,Consumer Group 对 Partition 进行消费操作,提高负载均衡能力和消费能力。

   (2)可扩展性
    kafka 集群支持热扩展

   (3)持久性、可靠性
    消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

   (4)容错性
    允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败)

   (5)高并发
    支持数千个客户端同时读写

 

5.Kafka 系统架构

  1.Kafka 系统架构

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

  (2)Topic
  可以理解为一个队列,生产者和消费者面向的都是一个 topic。
  类似于数据库的表名或者 ES 的 index
  物理上不同 topic 的消息分开存储

  (3)Partition
  为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分割为一个或多个 partition,每个 partition 是一个有序的队列。Kafka 只保证 partition 内的记录是有序的,而不保证 topic 中不同 partition 的顺序。

  每个 topic 至少有一个 partition,当生产者产生数据的时候,会根据分配策略选择分区,然后将消息追加到指定的分区的队列末尾。

  ##Partation 数据路由规则:
  1.指定了 patition,则直接使用;
  2.未指定 patition 但指定 key(相当于消息中某个属性),通过对 key 的 value 进行 hash 取模,选出一个 patition;
  3.patition 和 key 都未指定,使用轮询选出一个 patition。

  每条消息都会有一个自增的编号,用于标识消息的偏移量,标识顺序从 0 开始。

  每个 partition 中的数据使用多个 segment 文件存储。

  如果 topic 有多个 partition,消费数据时就不能保证数据的顺序。严格保证消息的消费顺序的场景下(例如商品秒杀、 抢红包),需要将 partition 数目设为 1。

  ●broker 存储 topic 的数据。如果某 topic 有 N 个 partition,集群有 N 个 broker,那么每个 broker 存储该 topic 的一个 partition。
  ●如果某 topic 有 N 个 partition,集群有 (N+M) 个 broker,那么其中有 N 个 broker 存储 topic 的一个 partition, 
剩下的 M 个 broker 不存储该 topic 的 partition 数据。   ●如果某 topic 有 N 个 partition,集群中 broker 数目少于 N 个,那么一个 broker 存储该 topic 的一个或多个 partition。
在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致 Kafka 集群数据不均衡。   分区的原因   ●方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;   ●可以提高并发,因为可以以Partition为单位读写了。

  

  (4)Replica
  副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。

  (5)Leader
  每个 partition 有多个副本,其中有且仅有一个作为 Leader,Leader 是当前负责数据的读写的 partition。

  (6)Follower
  Follower 跟随 Leader,所有写请求都通过 Leader 路由,数据变更会广播给所有 Follower,Follower 与 Leader 保持数据同步。Follower 只负责备份,不负责数据的读写。
  如果 Leader 故障,则从 Follower 中选举出一个新的 Leader。
  当 Follower 挂掉、卡住或者同步太慢,Leader 会把这个 Follower 从 ISR(Leader 维护的一个和 Leader 保持同步的 Follower 集合) 列表中删除,重新创建一个 Follower。

  (7)生产者
  生产者即数据的发布者,该角色将消息 push 发布到 Kafka 的 topic 中。
  broker 接收到生产者发送的消息后,broker 将该消息追加到当前用于追加数据的 segment 文件中。
  生产者发送的消息,存储到一个 partition 中,生产者也可以指定数据存储的 partition。

  (8)Consumer
  消费者可以从 broker 中 pull 拉取数据。消费者可以消费多个 topic 中的数据。

  (9)Consumer Group(CG)
  消费者组,由多个 consumer 组成。
  所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。可为每个消费者指定组名,若不指定组名则属于默认的组。
  将多个消费者集中到一起去处理某一个 Topic 的数据,可以更快的提高数据的消费能力。
  消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费,防止数据被重复读取。
  消费者组之间互不影响。

  (10)offset 偏移量
  可以唯一的标识一条消息。
  偏移量决定读取数据的位置,不会有线程安全的问题,消费者通过偏移量来决定下次读取的消息(即消费位置)。
  消息被消费之后,并不被马上删除,这样多个业务就可以重复使用 Kafka 的消息。
  某一个业务也可以通过修改偏移量达到重新读取消息的目的,偏移量由用户控制。
  消息最终还是会被删除的,默认生命周期为 1 周(7*24小时)。

  (11)Zookeeper
  Kafka 通过 Zookeeper 来存储集群的 meta 信息。

  由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费。
  Kafka 0.9 版本之前,consumer 默认将 offset 保存在 Zookeeper 中;从 0.9 版本开始,consumer 默认将 offset 保存在 Kafka 一个内置的 topic 中,该 topic 为 __consumer_offsets。

  也就是说,zookeeper的作用就是,生产者push数据到kafka集群,就必须要找到kafka集群的节点在哪里,这些都是通过zookeeper去寻找的。消费者消费哪一条数据,也需要zookeeper的支持,从zookeeper获得offset,offset记录上一次消费的数据消费到哪里,这样就可以接着下一条数据进行消费。

6.部署 kafka 集群

  1.部署 kafka 集群

 

7.总结

 

 

 

 

 

 

 

 

 

 

 

  

标签:队列,partition,broker,Kafka,topic,集群,消息
From: https://www.cnblogs.com/zhende/p/17606599.html

相关文章

  • Zookeeper集群
    Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说Zookeeper=文件系统+通知机制。目录一、Zookeeper概述二、Zookeeper工作机制三、Zookeeper特点四、Zookeeper数据结构五、Zookeeper应用场景六、Zookeeper选举机制七、部署Zo......
  • kafka_demo
    参考:概念:https://zhuanlan.zhihu.com/p/74063251代码运用:https://zhuanlan.zhihu.com/p/114209326 参考 kafka在windows平台的搭建和简单实用_一代键客的博客-CSDN博客,先验证本地是否能使用kafka成功生产消费消息,如果因为版本问题遇到报错“bootstrap-serverisnotarec......
  • Hadoop完全分布式集群安装
    Hadoop完全分布式集群安装使用版本:hadoop-3.2.0安装VMware看一下这张图,图里面表示是三个节点,左边这一个是主节点,右边的两个是从节点,hadoop集群是支持主从架构的。不同节点上面启动的进程默认是不一样的。下面我们就根据图中的规划实现一个一主两从的hadoop集群安装hado......
  • centos7.9 部署mongodb-4.4.18 分片集群
    准备基本环境名称ip地址cpu内存es监听端口redis-65110.0.2.18c64G9200redis-65210.0.2.28c64G9200redis-65310.0.2.38c64G9200......
  • 拷贝完hadoop集群后如何恢复网络
    流年似飞雪:结论:拷贝集群后不用重新配置网络知识:ip由四位组成,前三位是网络标识最后一个是端口ip你原先用的主机网络标识符是192.168.10,拷过来的集群的网络标识符为192.168.111,就把第三位的10改成111,网络标识得和拷过来的主机一致,都是192.168.111步骤:查看hadoop......
  • Rabbitmq集群高可用测试
    Rabbitmq集群高可用RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡。Rabbit模式大概分为以下三种:单一模式、普通模式、镜像模式单一模式:最简单的情况,非集群模式。没什么好说的。普通模式:默认的集群模式。对于Queue来说,消息实体只......
  • HTools:开源免费的Hadoop集群监控工具
    HTools是一款功能强大、开源免费的Hadoop集群监控工具,拥有人性化的用户体验、智能化的故障提醒。 HTools官网:http://www.htools.co 下载地址:http://www.htools.co/down/ 功能介绍: 向导式操作流程免客户端部署实时监控短信、邮件故障告警节点故......
  • windows redis集群搭建
    一、安装5.0以后版本的链接:https://pan.baidu.com/s/1uXj_46ausPASNjDMxbNAQQ提取码:egpf二、准备多个redis环境1、新建一个父文件夹(例如:redis-cluster)2、将redis安装目录拷贝多份,放到二级目录,并分别以端口号命名 3、编辑每个环境的redis.windows.conf文件内容 4、进......
  • mysql集群高可用搭建
    mysql galera集群模式    mysql节点多主模式    对任意一个节点的mysql操作都会实时同步到集群中的所有节点mysql上 使mysql集群像是无状态对外提供服务首节点安装rpm-epostfix-2:2.10.1-9.el7.x86_64rpm-emariadb-libs-5.5.68-1.el7.x86_64rp......
  • 谈谈 Kafka 的幂等性 Producer
    使用消息队列,我们肯定希望不丢消息,也就是消息队列组件,需要保证消息的可靠交付。消息交付的可靠性保障,有以下三种承诺:最多一次(atmostonce):消息可能会丢失,但绝不会被重复发送。至少一次(atleastonce):消息不会丢失,但有可能被重复发送。精确一次(exactlyonce):消息不会丢失,也不会被......