首页 > 其他分享 >kafka原理与应用

kafka原理与应用

时间:2023-09-04 18:06:56浏览次数:36  
标签:broker partition Partition Broker kafka 应用 原理 Leader


架构图

kafka原理与应用_kafka


kafka原理与应用_kafka_02

Broker

  1. Kafka集群包含多个服务器,服务器节点称为Broker
  2. Broker存储Topic数据
  1. 如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
  2. 如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
  3. 如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。

Leader&Follower

  1. 每个Partition有多个副本,有且仅有一个作为Leader
  2. Leader是当前负责数据读写的Partition
  3. 所有写请求通过Leader路由,数据变更会广播给Follower。
  4. 若Leader失效,会送Follower中选举Leader。
  5. 当Follower与Leader卡住、挂掉、同步慢,Leader会将Follower删除,重新创建Follower。

Topics和Partition

  1. Topic逻辑上理解为一个queue,每条消息都对应一个Topic
  2. Partition:物理上一个Topic分成多个Partition,对应一个文件夹,存储消息和索引文件
  3. Topic可以指定分区数,越多,吞吐量越大,资源越多,不可用性越高
  4. 单个Partition中数据有序
  5. 收到消息,均衡策略,append到Partition。属于顺序写磁盘,高效
  6. Partition可分布在不同的broker,同一Topic消息可并行写入Partition,高效
  7. Kafka会保留所有消息,提供时间空间删除策略
  8. Consumer的offset控制消费位点,所以broker无状态,不标记是否被消费,不需要锁避免重复消费,高效

Producer

  1. Producer发送消息到broker
  2. Partition机制选择存储到哪一个partition
  3. 消息可以制定key,producer根据key和partition机制判断发送到那个partition
  4. Partition机制可以通过指定Producer的partition.class。该calss必须实现Partitioner接口

Consumer Group

kafka原理与应用_消息队列_03

  1. 同一Topic的消息只能被一个Consumer Group的一个Consumer消费,多个Comsumer Group可以同时消费。
  2. 借此实现广播和单点。广播时,每个Consumer独立Group;单点时,所有Consumer在同一个Group

Push&Pull

  1. Producer向Broker push消息。
  2. Consumer从Broker pull消息。

Replication(副本)

  1. 0.8以前版本没有Replic,一旦某个Broker宕机,其上所有Partition都不可消费
  2. 为了负载均衡,Kafka尽量将Partition均匀分配到每个Broker。
  3. 为了提高容错,Kafka尽量将同一个Partition的Replic分散到不同的Broker。
  4. 分配Replication的算法
  1. 将所有Broker(假设共n个Broker)和待分配的Partition排序
  2. 将第i个Partition分配到第(i mod n)个Broker上
  3. 将第i个Partition的第j个Replica分配到第((i + j) mode n)个Broker上

消息同步流程

kafka原理与应用_Kafka_04

  1. 同步流程
  1. Producer发送消息
  2. Leader接收,写入本地log
  3. Follower pull,写入log,发送ACK
  4. Leader收到所有ISR(in sync replication)的ACK,增加HW,向Producer发送ACK
  5. Consumer从Leader读取已被commit的消息
  1. ZooKeeper的心跳机制检测Broker是否存活
  2. Leader会将Broker从ISR中移除
  1. Follower宕机
  2. Follower消息数落后于Leader指定值
  3. Follower指定时间未向Leader发送fetch请求

集成SpringBoot

  1. POM
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>1.3.5.RELEASE</version>
</dependency>
  1. Application.properties
spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092 #指定kafka server的地址,集群配多个,中间,逗号隔开
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: default_consumer_group #群组ID
      enable-auto-commit: true
      auto-commit-interval: 1000
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
server:
  port: 8500
  1. 生产者
@Autowired
private KafkaTemplate<String,Object> kafkaTemplate;
kafkaTemplate.send("Topic", msg);
  1. 消费者
@KafkaListener(topics = "demo")
    public void listen (ConsumerRecord<?, ?> record){
        System.out.printf("topic is %s, offset is %d, value is %s \n", record.topic(), record.offset(), record.value());
    }


标签:broker,partition,Partition,Broker,kafka,应用,原理,Leader
From: https://blog.51cto.com/u_16225007/7353762

相关文章

  • Consul原理介绍
    官方文档:https://www.consul.io/docsRaft动画演示:http://thesecretlivesofdata.com/raft/注册中心对比Consul特点服务发现、健康检查、Key/Value存储、安全服务通信(TLS证书)、多数据中心架构角色数据中心数据中心内,Client和Server通过LANGosssip进行通信,同步集群节点信息,其保障......
  • plumelog介绍与应用-一个简单易用的java分布式日志系统
    官方文档:http://www.plumelog.com/zh-cn/docs/FASTSTART.html简介无代码入侵的分布式日志系统,基于log4j、log4j2、logback搜集日志,设置链路ID,方便查询关联日志基于elasticsearch作为查询引擎高吞吐,查询效率高全程不占应用程序本地磁盘空间,免维护;对于项目透明,不影响项目本身运行无......
  • 云计算在大数据分析中的应用与优势
    文章目录云计算在大数据分析中的应用云计算在大数据分析中的优势云计算在大数据分析中的示例未来发展和拓展结论......
  • 应用可视化流程设计,实现提质增效流程化办公!
    如果想要实现提高办公效率的目的,显然采用传统的办公方式是无法实现的。如今,在低代码技术平台深入无纸化办公的当下,应用可视化流程设计软件,可以借助其灵活、易操作、可视化、轻量级等优势特点,助力广大用户实现流程化办公,进入数字化转型新时代。在众多软件服务商中,流辰信息是一支有......
  • 如何将企业微信应用对接ChatGPT智能AI知识库
    企业微信应用如何对接ChatGPT智能AI回复,请参照下面的流程企业微信的应用具备以下能力:收发消息以普通会话的形式存在,可推送消息、接收消息,也可以设置自定义菜单。通过“消息推送”API,我们后台可以调用接口推送消息给企业成员通过开启“接收消息”API,员工发送消息转发给我们自己的......
  • 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介 [摘]
    作者:车东关键词:Lucenejavafull-textsearchengine Chinese wordsegment内容摘要:Lucene是一个基于Java的全文索引工具包。基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史全文检索的实现:Luene全文索引和数据库索引的比较中文切分词机制简介:基于词库和自动切分......
  • iOS代码加固与保护方法详解 - 提升iOS应用安全性的关键步骤
    摘要:作为一名从事iOS开发多年的技术博主,长期以来我都没有重视代码加密和加固。然而,最近了解到使用IPAGuard工具可以对iOS应用进行混淆保护,我开始重新审视iOS应用的安全性问题。本文将详细介绍如何使用IPAGuard工具进行代码加固和保护,以提高iOS应用的安全性和抵御逆向分析的风险。......
  • 入门性文章要替新手多多考虑--csdn开发高手12期《利用Eclipse开发Hibernate应用程序》实
    注:本文使用Eclipse3.0.1(含中文包)测试,中英文请读者自行对应。  这篇文章总体写的不错,对于新手上路很有帮助。不过我在实践的时候也遇到了一些问题,在这里总结出来,希望大家少走弯路。1.Run的问题:“OK,Run一下”,作者仅提到这里,而对于新手,也许在这里就卡住了。怎么Run,Run什么啊?来,我......
  • Eureka的原理分析
     ......
  • centos下手动编译Qt应用程序
    centos7下手动编译Qt5的程序需要Qt5的源代码编译出Qt5在linux下的可执行环境,怎么编译这个以后再说我这里编译的版本是5.9.9然后,将这个环境拷贝到centos某个目录下,我放到主目录下设置环境变量编写一个文本文件叫qt-5.9.9-env,内容是exportPATH=/home/fan/qt-5.9.9/bin:$PATHe......