首页 > 其他分享 >Kafka相关

Kafka相关

时间:2022-12-27 22:31:28浏览次数:57  
标签:副本 分区 Kafka 消息 相关 数据 Leader

定义
传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。
最新定义:Kafka是 一个开源的 分 布式事件流平台 (Event StreamingPlatform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。

消息队列
常见的消息队列:Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。
大数据场景主要采用 Kafka 作为消息队列。
传统消息队列的应用场景
缓存/消峰、解耦和异步通信。
缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。

```消息队列的两种模式```
点对点:消费者主动拉取数据,消息收到后清除消息
发布/订阅:
• 可以有多个topic主题
• 消费者消费数据之后,不删除数据
• 每个消费者相互独立,都可以消费到数据
基础架构
  • Producer:消息生产者,就是向 Kafka broker 发消息的客户端。
  • Consumer:消息消费者,向 Kafka broker 取消息的客户端。
  • Consumer Group(CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
  • Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个broker 可以容纳多个 topic。
  • Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。
  • Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
  • Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个Follower。
  • Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。
  • Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。


Kafka生产者

生产者消息发送流程

原理:在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator, Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker。

生产者分区的好处
  • 便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。
  • 提高并行度,生产者可以以分区为单位发送数据;消费者可以以分区为单位进行消费数据。


生产者如何提高吞吐量
  • batch.size:批次大小,默认16k
  • ​linger.ms​​:等待时间,修改为5-100ms
  • compression.type:压缩snappy
  • RecordAccumulator:缓冲区大小,修改为64m


ACK应答级别
  • acks=0,生产者发送过来数据就不管了,可靠性差,效率高;
  • acks=1,生产者发送过来数据Leader应答,可靠性中等,效率中等;
  • acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低;
  • 在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,允许丢个别数据;acks=-1,一般用于传输和钱相关的数据, 对可靠性要求比较高的场景。


数据传递语义
  • 至少一次(At Least Once)= ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于
  • 最多一次(At Most Once)= ACK级别设置为0
  • At Least Once可以保证数据不丢失,但是不能保证数据不重复;
  • At Most Once可以保证数据不重复,但是不能保证数据不丢失。
  • 精确一次(Exactly Once):对于一些非常重要的信息,比如和钱相关的数据,要求数据既不能重复也不丢失。
  • Kafka 0.11版本以后,引入了一项重大特性:幂等性和事务。


幂等性原理
  • 幂等性就是指Producer不论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了不重复。
  • 精确一次(Exactly Once) = 幂等性 + 至少一次( ack=-1 + 分区副本数>=2 + ISR最小副本数量>=2) 。

相同主键的消息提交时,Broker只会持久化一条。其中PID是Kafka每次重启都会分配一个新的;Partition 表示分区号;Sequence Number是单调自增的。 所以幂等性只能保证的是在单分区单会话内不重复。

如何使用幂等性
  • 开启参数 enable.idempotence 默认为 true,false 关闭。


kafka副本
  • Kafka 副本作用:提高数据可靠性。
  • Kafka 默认副本 1 个,生产环境一般配置为 2 个,保证数据可靠性;太多副本会增加磁盘存储空间,增加网络上数据传输,降低效率。
  • Kafka 中副本分为:Leader 和 Follower。Kafka 生产者只会把数据发往 Leader,然后 Follower 找 Leader 进行同步数据。
  • Kafka 分区中的所有副本统称为 AR(Assigned Repllicas)。
  • AR = ISR + OSR
  • ISR,表示和 Leader 保持同步的 Follower 集合。如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms参数设定,默认 30s。Leader 发生故障之后,就会从 ISR 中选举新的 Leader。
  • OSR,表示 Follower 与 Leader 副本同步时,延迟过多的副本。


Leader的选举流程
  • Kafka 集群中有一个 broker 的 Controller 会被选举为 Controller Leader,负责管理集群broker 的上下线,所有 topic 的分区副本分配和 Leader 选举等工作。Controller 的信息同步工作是依赖于 Zookeeper 的。
  • 选举规则:在isr中存活为前提,按照AR中排在前面的优先。例如ar[1,0,2], isr [1,0,2],那么leader就会按照1,0,2的顺序轮询
  1. broker启动后在zk中注册
  2. controller谁先注册,谁说了算
  3. 由选举出来的Controller监听brokers节点变化
  4. Controller决定Leader选举
  5. Controller将节点信息上传到ZK
  6. 其他contorller从zk同步相关信息
  7. 假设Broker1中Leader挂了
  8. Controller监听到节点变化
  9. 获取ISR
  10. 更新Leader及ISR




















标签:副本,分区,Kafka,消息,相关,数据,Leader
From: https://blog.51cto.com/u_15667024/5973681

相关文章

  • docker介绍、安装与启动、常用命令(启动、镜像相关、容器相关)
    参考地址:https://www.cnblogs.com/jgx0/p/16319167.html今日内容概要docker介绍docker安装与启动docker常用命令内容详细1、docker介绍1.1什么是虚拟化#在计......
  • [TOP]load average 负载相关
    如何判断系统是否已经OverLoad?loadaverage的值小于CPU数量+1为正常 loadaverage的值/CPU数量=每个核消息等待处理数 一般是会根据15分钟那个load平均值为首先。loa......
  • Docker相关知识与命令
     安装docker,1.先卸载机器之前的docker相关组件sudoyumremovedocker\ docker-client\docker-client-latest\......
  • layout文本相关
    Textviewt=findViewById(R.id.t); ONE设置文本内容:在XML中android:text直接写在java中setText()中修改注意点1继承appcompatactivity注意点2覆写单参数的oncreate......
  • vim 相关操作
    1、查找192.168.126.50 [all:vars]ansible_ssh_user=rootansible_ssh_pass=12354678/12n:下一个,N:上一个2、替换替换当前行第一个:[service]192.168.126.50[a......
  • Apache Kafka 移除 ZK Proposals
    Zookeeper和KRaft这里有一篇Kafka功能改进的proposal原文。要了解移除ZK的原因,可以仔细看看该文章。以下是对该文章的翻译。动机目前,Kafka使用Zookeeper保存......
  • 客户端 连接 k8s-kafka 异常
     异常信息:java.net.UnknownHostException:kafka-0.kafka.flink-stat.svc.cluster.localatjava.net.InetAddress.getAllByName0(InetAddress.java:1287)~[?:1.8......
  • 【基于物理的渲染(PBR)白皮书】(三)迪士尼原则的BRDF与BSDF相关总结
    基于物理的渲染(PhysicallyBasedRendering,PBR)技术,自迪士尼在SIGGRAPH2012上提出了著名的“迪士尼原则的BRDF(DisneyPrincipledBRDF)”之后,由于其高度的易用性以及方便......
  • Dockerfile相关(推送镜像?私有仓库?)(九)
    上面我们讲到了Dockerfile的基本写法以及构建镜像的时候一些注意事项,那么镜像构建完成后,如何把我们的镜像给到别人使用呢?第一种方法就是利用Docker官方提供的公共的D......
  • 测试执行中工作效率相关指标
    →执行效率:利用测试用例文档页数除于此次系统测试执行的时间总和(不包含用例文档编写时间)。补充指标方法是用例的个数除于此次系统测试的时间总和。用于获得工作中测......