分布式-MQ-07 kafka高级特性及常见问题调优

菜鸟的Kafka完整入门学习笔记,修订一 文章目录一、Kafka概述1.1、定义1.2、消息队列(MQ)1.2.1、传统应用场景——异步处理1.2.2、使用消息队列的优点1.2.3、消息队列的两种模式1.3、Kafka架构二、快速入门2.1、安装配置与部署2.2、Kafka命令行操作三、Kafka高级—架构深入3.1、Kafka运作流程及消息文件存储3.2、生产者3.2.1、数据分区存放策略3.2.2、数据可靠性保证3.2.3、ACK应答机制3.2.4、面向消费者保持消息一致3.2.5、消息交付语义以及幂等性3.3、消费者3.3.1、两种消费方式3 阅读详情

一、kafka高级特性

1.1 producer发布消息机制

  • 消息写入方式
    producer采用push模式将消息发送到broker,消息将被顺序写入对应的partition中,因为顺序写的极高,保证了kafka的吞吐效率。
  • 消息路由机制
    producer发消息到时,因为在多分区中只能写入唯一分区,所以消息写入分区号是需要计算的。
    • 指定分区号,则直接使用该分区
      public ProducerRecord(String topic, Integer partition, K key, V value)
      
    • 未指定分区,指定key[hash取模指定分区]
      public ProducerRecord(String topic, K key, V value) 
      //对当前key进行hash,取模分区数
      Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;    
      
    • 分区号及key均未指定[RoundRobinPartitioner 轮询发送指定分区]
      public ProducerRecord(String topic, V value)
      //轮询RoundRobin
      int nextValue = nextValue(topic);
      List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic);
      if (!availablePartitions.isEmpty()) {
          int part = Utils.toPositive(nextValue) % availablePartitions.size();
          return availablePartitions.get(part).partition();
      } else {
          // no partitions are available, give a non-available partition
          return Utils.toPositive(nextValue) % numPartitions;
      }
      
  • 消息写入过程
    在这里插入图片描述

1.2 Controller及partition选举机制

在这里插入图片描述

1.2.1 Controller选举机制(zk控制)

kafka集群启动时,所有broker向zookeeper发送创建**/Controller临时节点的请求,由zookeeper来保证只有1个broker节点能创建成功,该broker则当选为kafka集群中的Controller,负责管理集群分区和副本状态信息。
当controller节点的broker宕机,则zookeeper中的
/Controller**临时节点消失,所有存活的broker将再次竞争创建临时节点,由zookeeper保证唯一的新broker成为Controller。

具备控制器身份的broker需要比其他普通的broker多一份职责,负责监听整个集群所有分区和副本的状态。具体细节如下:

  • 监听broker相关的变化。为Zookeeper中的/brokers/ids/节点添加BrokerChangeListener,用来处理broker增减的变化。

  • 监听topic相关的变化。为Zookeeper中的/brokers/topics节点添加TopicChangeListener,用来处理topic增减的变化;为Zookeeper中的/admin/delete_topics节点添加TopicDeletionListener,用来处理删除topic的动作。

  • 从Zookeeper中读取获取当前所有与topic、partition以及broker有关的信息并进行相应的管理。对于所有topic
    所对应的Zookeeper中的/brokers/topics/[topic]节点添加PartitionModificationsListener,用来监听topic中的分区分配变化。

  • 更新集群的元数据信息,同步到其他普通的broker节点中。

1.2.2 partition选举Leader机制
  • unclean.leader.election.enable=false 不选非Isr集合中的broker
    选择Isr集合中,第一个broker作为leader。(第一个broker最先放进ISR列表,可能是同步数据最多的副本)
  • unclean.leader.election.enable=true 如果Isr列表为空,将选择AR中可用的broker作为partition的lerder

副本进入ISR列表有两个条件:

  • 副本节点不能产生分区,必须能与zookeeper保持会话以及跟leader副本网络连通
  • 副本能复制leader上的所有写操作,并且不能落后太多。(与leader副本同步滞后的副本,是由
    replica.lag.time.max.ms 配置决定的,超过这个时间都没有跟leader同步过的一次的副本会被移出ISR列表)

1.3 Rebalance再平衡机制

1.3.1 rebalance的前提

消费者通过subscribe不指定分区消费的情况下会发生rebalance,assign这种指定分区消费的方式则不会再平衡。

1.3.2 什么情况下会发生rebalance
  • 消费者组的consumer数量发生增减(重启某台消费者服务器时势必也会造成rebalance)
  • 动态给topic增加分区
  • 消费者组订阅了更多的topic
1.3.3 Rebalance的过程
  • 第一阶段:选择组协调器(选小组长)
  • 第二阶段:加入消费组Join Group
  • 第三阶段:Sync Group
1.3.4 Rebalance分配策略

rebalance共有3中再平衡策略:range、round-robin、sticky

  • range(范围分配) 假设有10个分区,消费者组内有3个消费者,则:

    消费者0被分配:partition-0、partition-1、partition-2、partition-3

    消费者1被分配:partition-4、partition-5、partition-6

    消费者2被分配:partition-7、partition-8、partition-9

  • round-robin(轮询分配) 假设有9个分区,消费者组内有3个消费者,则:

    消费者0被分配:partition-0、partition-3、partition-6

    消费者1被分配:partition-1、partition-4、partition-7

    消费者2被分配:partition-2、partition-5、partition-8

  • sticky(稳态分配)

    sticky与round-robin的分配方案比较类似,但显著的区别时,sticky尽可能保证本次分配与上次相同。

    即原有分配方案,尽可能不变。

    sticky发生rebalance的两个原则:

    • 1)分区分配尽可能均匀
    • 2)再平衡尽可能与上次保持相同

1.4 日志存储

kafka消息存储在指定的log.dir目录下,topic对应的日志信息以Topic+分区号命名。

  • 为避免日志文件过大,kafka为.log文件指定分段大小,以避免文件过大影响读写效率

    单个日志分段大小

    log.segment.bytes: The maximum size of a single log file

    Default: 1073741824 = 1GB

  • 存储文件消息内容的文件.log文件

  • 为提高查询效率,.log文件的内容以每次4K(可配置)的offset作为索引值记录到.index文件中。存储索引offset的文件,可以快速定位消息的offset进而查找到.log真是消息内容的位置。

  • .timeindex索引文件,同样在.log文件中每次以4K发送一次来到.timeindex中。

在这里插入图片描述

1.5 分区数如何选择

bin/kafka-producer-perf-test.sh --topic my_local_topic --num-records 1000000 --record-size 1024 --throughput -1 --producer-props bootstrap.server=192.168.149.128:9092 acks=1

二、kafka常见问题及调优

2.1 kafka启动慢及消费者重新订阅慢

2.1.1 kafka重启慢问题
  • kafka-server-start.sh 修改默认初始化堆内存及最大堆内存
#原值
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi
#根据物理内存情况32G内存可置为16G
export KAFKA_HEAP_OPTS="‐Xmx16G ‐Xms16G ‐Xmn10G ‐XX:MetaspaceSize=256M ‐XX:+UseG1GC ‐XX:MaxGCPauseMillis=50 ‐XX:G1He apRegionSize=16M"
#最大STW50ms,使用G1垃圾回收器,单元格大小16M,元空间256M,初始化内存16G.最大内存16G,年轻代10G
  • 修改启动实例或关闭实例时梳理日志文件线程数
    在启动kafka时,需要后台线程将log.dir目录中topic的分区segment log读取到内核空间,当partition分区中的数据很多(或许日志删除hour过大,保留日志量很大),后台默认的num.recovery.threads.per.data=1将忙不过来,可以试着将该线程数放大
2.1.2 kafka消费者重启后重新订阅很慢

当有消费者宕机或重启,这是生产中非常常见的状态,将导致coordinator认为分区与消费者的对应关系发生变化,需要重新平衡消费者于分区关系。

  • session.timeout.ms 根据服务需求,可大可小,当该值更小时,更容易触发rebalance,当该值更大时,可能消费者已宕机而broker未发现。
  • max.poll.interval.ms 如果消费者处理消息的时间,超过该设置值,将视为消费者处理能力差,或被踢出ConsumerGroup
  • rebalance策略,可以选择sticky以减少已有稳定分区的重新分配。

2.2 kafka消息顺序性分析

能否保证所有消息有序?不能,只能保证分区内有序(局部有序)

2.3 kafka如何保证不丢消息

1、kafka能否保证消息不丢? 不能 why?什么情况下会丢消息?
2、消息丢失及处理(消息保障)
3、消费确认机制等

2.4 kafka能否保证消息幂等性

是否支持消息幂等?
消息生产端可调整配置支持幂等,消费者端需要业务自行实现(服务端需要有异常补偿,基于Corgi准实时补偿 + 异常表补偿等)

2.4 kafka高性能的原因

  • 磁盘顺序读写
    kafka消息不能修改及不会在文件中间删除内容,保证了每次写内容都是在文件末尾的追加,从而保证写文件的顺序行;每次读内容时有.index文件的索引查找,及.log文件的分段,又能极大结合磁道读取内容的顺序行,从而提高读取效率。

  • 数据传输零拷贝

  • 读写数据的批量batch处理及压缩传输

三、kafka集群的CAP问题

什么是CAP,当分布式系统同时涉及读写时,需要保证一致性(Consistence)、可用性(Availabiliy)、分区容错性(Partition Tolerance)的平衡。成熟的分布式系统一般是在一致性、可用性方面找到平衡点,依据服务的需求设计出更贴近使用的CAP系统。

当强调一致性时,需保证所有的ISR必须完成数据的同步才算完成生产者数据的写入,而此时从可用性来看,只要Leader存活,是可以保证可用性的。除非Leader宕机,Follower才需要从ISR中靠前的broker选择接替Leader,短时间出现不可用。
当强调可用性时,也可以通过保证最终一致性(如ack=-1,> nums/2个副本完成数据同步),使集群其他节点最终数据一致性,从而实现可用性和一致性得以兼得。

3.1 一致性

分布式系统一般存在多个副本,Leader副本和多个Follower副本,如果系统能够保证线性一致性当然极好,但如果不能保证线性一致,进而保证顺序一致性也能满足需要。

  • 什么是线性一致性?
    线性一致性(Linearizability),也称原子一致性(atomic consistency)、强一致性(strong consistency)。从字面意思就可以理解,多个副本之间的同步状态像是集群只有1个副本。所有的操作都是原子的,当针对leader进行更新时,多个follower副本的状态也需要同步更新完成才能让该条更新结果对客户端可见。
    显而易见,线性一致性对消费者客户端是十分友好的,我和朋友小张分别拿着手机看NBA总决赛最后10s,当小张看到Ray Allen三分绝杀比赛结束时,我看到的却还是比分持平,等待发球,我的内心是无法接收的。
    但做到线性一致性是需要付出更多代价的,比如在kafka中消息生产者可以将 ACKS=ALL或-1,同时 min.insync.replicas(最少同步副本数量)设置为AR(所有副本数),此时生产者发送消息必须所有副本写入完成才算成功。但这毫无疑问将导致集群可用性的降低。
  • 什么是顺序一致性(Sequence Consistency)
    假设分布式系统中,X的原值为0,ClientA对X的值修改为1,那么因为网络的延迟等原因,虽然B0、C1的执行事件与A0存在先后顺序,但在服务端真正执行的顺序却是不确定的。所以B0、C1由于与A0存在并行关系,所以B0、C1得到X=0或X=1都是可能的。
    顺序一致性,需要保证的就是:当一个Client从服务端得到最新的结果后,后续其他Client得到的结果也必须是最新的。既:当B0如果读到X=1,那么C1也只能得到X=1。这样就保证了有序的一致性。
    在这里插入图片描述
    我们从kafka的角度再详细的看读写一致性问题。
3.1.1 数据写一致性控制

更新的数据只能由Leader写入,然后同步超过半数以上副本算写入成功,其他未立即同步的副本会在后续完成写入,可得数据写入是线性一致、强一致的。

Acks=-1 或Acks=All
min.insync.replicas >= num/2+num%2 (保证同步副本超过半数)
3.1.2 数据读一致性控制

kafka官网中介绍,Consumer客户端连接不同的Partition分区,虽然有了HW高水位的存在保证消费者能读取到的消息水位是相同的,但由于不同分区的log-end-offset偏移量是不同的(显然Leader的最大偏移量是最大的),当有ClientA、B分别读取Follower1和Follower2,此时X=3尚未同步到Follower2。
在这里插入图片描述
如果此时出现Rebalance,则可能出现ClientA、B再平衡到Follower2、Follower1,但由于zookeeper的存在,客户端和Zookeeper分别维护了zxid和lastZxid值(下面细讲),当客户端的zxid>zookeeper维护节点的lastZxid时,也就是ClientA连接到Follower2,但是Follower的lastZxid尚未更新到3,此时如果连接将导致消息丢失。所以zk将保证重连时ClientA不会连接到Follower2。
在这里插入图片描述
上面两幅图的动态过程,大致讲解了zk在保证消息顺序一致性所做的事。那么什么是zxid?

  • zxid
    就是事务id,由64位二进制数组成,是为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。
    其中高32位为epoch值(eopch值主要用来区分leader的版本,当前leader宕机选出下个leader时则需要epoch+1,以此区别leader朝代的更迭),低32位则是当前leader通知下依次递增的计数号码。
    在这里插入图片描述
    看到这个zxid有没有让你联想到什么?我的感受是:
  • 从外形上看类似java对象头Object Header中Markword,甚至在偏向锁中也有epoch值概念。
  • 从高低位搭配上看,酷似ReentrantReadWriteLock的sync内部类中用高16位表示共享锁状态,低16位表示独占写锁状态。

3.2 可用性

可用性指的是在集群中,一部分节点故障后,集群整体是否还能响应客户端的读写请求。
提到可用性,势必会和一致性做兼容。

  • WARO(Write All Read One)
    所有副本写入完成才算成功,读取数据只从一个节点读。当Write All时保证了原子性、强一致性,所以读取节点时无疑会读取最新数据。但此时可用性并不高。
  • Quorum(NWR) 权衡一定的一致性和可用性。
    • N:总的副本数
    • W:更新数据需要保证完成写入的节点数
    • R:读取数据时,需要读取的副本节点数
  • N=5,W=5,R=1(追求强一致性,需要保证所有节点均写入成功,读取时数据是最新的)
  • N=5,W=3,R=3(写入时需要保证超过半数节点写入成功,读取超过半数节点的数据,未完成同步的节点可以通过zxid比较事物号大小,保证读取时顺序一致性)
  • N=5,W=3,R=1(当追求可用性更高时,该种配置可以在存在2个节点故障时仍然可用,且可以保证顺序一致性。)

3.3 分区扩展性

由于kafka是分布式部署在不同机器上的,并且由于网络不可靠,Leader也可能存在网络异常的场景,当Controller认为当前Leader不可用,broker将会再次选举(broker首先会推选自己为leader,再经由与其他broker投票生成新的leader),若老的leader恢复后,新leader也生成了,将出现新旧Leader并存的问题。此时zookeeper将再次通过上述的epoch值比较,控制版本保证数据一致性。

如何从零到一设计一个MQ消息队列 消息队列整体设计思路 主要是设计一个整体的消息被消费的数据流。 这里会涉及到:消息生产Producer、Broker(消息服务端)、消息消费者Consumer。 1.Producer(消息生产者):发送消息到Broker。 2.Broker(服务端):Broker这个概念主要来自于Apache的ActiveMQ,特指消息队列的服务端。 主要功能就是:把消息从发送端传送到接收端,这里会涉及到消息的... 阅读详情

相关推荐

利用 Golang 和 Kafka 构建分布式任务调度系统

本文旨在为开发人员提供一套完整的解决方案,用于构建基于 Golang 和 Kafka 的分布式任务调度系统。我们将覆盖从基础概念到高级特性的所有内容,包括系统架构设计、核心组件实现、错误处理和性能优化等。核心概念与联系:介绍分布式任务调度和 Kafka 的基本概念系统架构设计:详细讲解系统整体架构核心实现:使用 Golang 和 Kafka 实现关键组件实际应用:展示系统在真实场景中的应用高级话题:讨论性能优化和扩展性考虑分布式任务调度:在多个计算节点上协调和执行任务的过程Kafka。

AI Agent Harness Engineering 1096

kafka高级特性

kafka高级特性

拒绝熬夜啊的博客 687

RK3588 MPP视频编码实战:从环境搭建到高效封装

本文详细介绍了在RK3588平台上利用MPP(Media Process Platform)进行硬件视频编码的完整实战流程。从MPP库的环境搭建、编译安装,到核心编码参数(如码率控制、GOP、图像对齐)的深入解析,并提供了一个可复用的C++编码器类封装方案,帮助开发者快速实现高效的H.264/H.265视频编码,显著降低CPU占用。

weixin_29192211的博客 346

Kafka 高级特性

Kafka消费者默认对于未订阅的topic的offset的时候,也就是系统并没有存储该消费者的消费分区的记录信息,默认Kafka消费者的默认消费策略:latest消费者在消费数据的时候默认会定期自动提交偏移量,用户可以通过以下两个参数配置: enable.auto.commit = true 默认auto.commit.interval.ms = 5000 默认。

码农郭大大的博客 2091

【实战指南】Jaspersoft Studio + JasperReports:从零构建企业级PDF报表

本文详细介绍了如何使用Jaspersoft Studio和JasperReports从零构建企业级PDF报表。通过可视化设计、数据连接、模板设计到最终输出的全链路支持,这套组合方案显著降低了报表开发的维护成本。文章还提供了开发环境搭建、中文乱码解决方案、Java集成代码及性能优化技巧,适合需要高效生成复杂PDF报表的开发者。

weixin_42666036的博客 246

C语言——利用矩阵LU分解法求逆、行列式

本章介绍了LU分解法,以及如何利用LU分解法求逆、行列式,针对每个公式、原理、代码进行了详细介绍,希望可以给大家带来帮助。

王元笙 1万+

一个细节翔实、可供参考的支付体系架构演进实例

作者|陈宗编辑|小智从单一功能到完整体系、从臃肿单体 Php 演变为高性能高可靠可伸缩的分布式服务架构,于 16 年快速融合美丽说和淘世界支付体系,并在历年大促中保持无故障的出色表现,逐渐摸索出适应全集团复杂业务形态和变化的支付平台架构。具体是怎么做的?注:本文整理自美丽联合集团资深工程师陈宗在 ArchSummit 深圳 2017 上的演讲,原题为:《支付体系架构与实践》。上篇:支付体系架构演进...

weixin_34268579的博客 464

【GD32F407】i2c主机发送,从机中断接收

前言 现在手里负责的一个项目需要用i2c和主芯片进行通信主动发送,中断接收,这就需要支持i2c主机模式和从机模式,先查看原理图 这里我们用到了两条i2c总线进行数据的交替传输,避免在使用一条总线是发送数据和接收数据冲突 初始化i2c控制器 s32_k i2cDevInit(u8 byBusId, TI2cBus *pTI2cBus) { //PCLK = 36000000 BOOL retFlg = FALSE; int I2xSCL = pTI2cBus->byFastMode ?

Enosji的博客 6245

Kafka高级特性

可以通过实现 org.apache.kafka.clients.consumer.internals.PartitionAssignor 接口来实现。

今天吃了吗的博客 1万+

AgentScope 2.0 源码解析-工具系统解读:从内置工具到权限管控的完整实践

本文深入解析AgentScope 2.0工具系统的完整架构,覆盖内置工具集(文件读写、命令执行、搜索匹配)、MCP协议集成(STDIO/HTTP双传输、客户端封装、工作空间网关)、工具包管理与动态分组、权限引擎的多级决策机制(危险路径保护、只读识别、模式控制),以及自定义工具开发流程。通过分层架构图和时序图直观展示组件协作关系,结合安全最佳实践与故障排除指南,为开发者提供从工具使用到安全管控的全链路参考。

program哲学 567

FANUC机器人_KAREL编程入门学习(1)

FANUC机器人_KAREL编程入门学习(1)

Robot_PLC_HMI_Automation 6419

MQ学习笔记(一)Kafka简介

Message Queue 消息队列 ,在消息的传递过程中保存消息的容器。父亲==》书架《==儿子好处:应用解耦,异步提速,限流削峰使用成本:引入复杂度,最终一致性,高可用性何时使用:生产者不需要从消费者处获得反馈能够容忍短暂的不一致性效果要大于副作用。

qq_36509457的博客 1355

ENVI_基于无人机数据的果树提取与相对健康监测

一、数据处理 1.计算植被指数VDVI或GDVI:Band Math / Spectral Indices 2.制作掩膜:ROI——Threshold——Subset 二、单地块果树提取 1.绘制感兴趣区shp 2.确定果树提取参数:Count Crops 3.输出果树矢量文件:Convert Crops To Shapefile 4.果树相对健康程度分析:Calculate Crop Me...

提供技术服务、资源分享 429690771 1398

Java-Interview中间件深度剖析:Redis、Kafka与MQ应用场景全解析

在现代Java后端开发中,中间件扮演着至关重要的角色。Redis、Kafka和MQ作为主流的中间件解决方案,广泛应用于缓存、消息传递和分布式系统中。本文将深入剖析这三款中间件的核心功能、应用场景及最佳实践,帮助开发者在实际项目中做出更优的技术选型。 ## Redis:高性能缓存与数据存储的完美结合 ### Redis核心特性与优势 Redis是一款基于内存的Key-Value数据库,以其卓越

gitblog_00496的博客 1161

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 944

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

后端面试高频考点:消息队列选型与性能调优

后端面试高频考点:消息队列选型与性能调优

学海无涯,笃行致远 72

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据库分布式消息队列

数据库分布式消息队列 作者:vincentchma,腾讯 IEG 后台开发工程师 一、消息队列的演进 分布式消息队列中间件是是大型分布式系统中常见的中间件。消息队列主要解决应用耦合、异步消息、流量削锋等问题,具有高性能、高可用、可伸缩和最终一致性等特点。消息队列已经逐渐成为企业应用系统内部通信的核心手段,使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、Pulsar 等,此外,利用数据库(如 Redis、MySQL 等)也可实现消息队列的部分基本功能

1743

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

《吃透 MQ 系列》之扒开 Kafka 的神秘面纱

大家好,我是武哥。这是《吃透 MQ 系列》的第二弹,有些珊珊来迟,后台被好几个读者催更了,实属抱歉!这篇文章拖更了好几周,起初的想法是:围绕每一个具体的消息中间件,不仅要写透,而且要控制好...

武哥漫谈IT 614

MQ(消息队列)面试题集

全面且详细的MQ(消息队列)面试题集,涵盖核心概念、使用场景、技术实现、常见问题解决方案等内容。

一个摩拉的博客 1455

MQ中间件

通过持久化和确认机制避免消息丢失,通过幂等设计处理重复消费,通过队列分片保证顺序,结合本地消息表实现分布式事务最终一致性。同时,完善监控和补偿机制,确保异常场景下业务可恢复。产品核心优势典型场景吞吐量协议支持RabbitMQ路由灵活、功能丰富复杂业务解耦、通知万级AMQP、MQTT 等Kafka高吞吐、分布式存储日志采集、大数据流式处理十万级自定义协议(兼容 Kafka 协议)RocketMQ高吞吐 + 企业级特性电商交易、分布式事务十万级。

2301_81854917的博客 659

从这个角度,我终于理解为什么需要Kafka这样的东西了!

先从数据库说起。我们都知道,数据库中的数据,只要应用程序员不主动删除,就可以任意次读写,多少次都行。 数据库还对外提供了很漂亮的接口——SQL ——让程序员操作数据。但是...

码农翻身 1401

Kafka - 是什么?一篇文章带你读懂分布式消息队列核心概念

本文介绍了Apache Kafka的核心概念、架构原理与使用场景。作为分布式流处理平台,Kafka通过生产者-消费者模型实现高吞吐、低延迟的消息传递,支持分区、副本等机制保障可靠性和扩展性。文章包含Kafka与传统消息队列的对比、Docker快速部署指南,以及Java生产者代码示例,帮助开发者快速理解并应用这一技术。Kafka特别适合日志聚合、实时流处理等大数据场景,是构建现代分布式系统的关键组件。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Kafka相关(概述、架构解析、MQ、流处理、高级特性、API、Flume/SpringBoot集成等)

一、概述 官网:http://kafka.apache.org/ Kafka是什么? Apache Kafka是一个分布式的 流数据 平台; 三层含义: 消息系统(MQ): 发布和订阅流数据 流数据处理(Streaming): 可以基于Kakfa开发流数据处理的应用,用以实时处理流数据 流数据存储(Store): 以一种安全分布式、冗余、容错的方式,存放流数据; Kafka的典型应用场景(...

MCY的博客 492

分布式消息队列的演进

作者:vincentchma,腾讯 IEG 后台开发工程师一、消息队列的演进分布式消息队列中间件是是大型分布式系统中常见的中间件。消息队列主要解决应用耦合、异步消息、流量削锋等问题,具有高...

过往记忆大数据 1540
上一篇: 分布式-MQ-06 kafka基本使用
下一篇: Tomcat-线程模型及设计精髓
旧梦昂志
博客等级 码龄7年 3724粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧梦昂志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值