扫盲Kafka?看这一篇就够了!

Kafka详解 consumer 提交offset的时候,kafka Offset manager会首先追加一条新的conmit消息到 _consumer_offset topic中,然后更新对应的缓存,读offset时从缓存中读取,而不是直接读取 _consumer_offset topic。如查找368801的offset消息。同一个Topic的每个分区中的数据是不重复的,partition的表现形式是一个一个文件夹。文件,每个 .log文件 的大小是一样的,但是里面存储的消息条数可能不相同(可能消息的大小不一致)。 阅读详情

kafka的使用场景

为什么要使用 Kafka 消息队列?

解耦、削峰:传统的方式上游发送数据下游需要实时接收,如果上游在某些业务场景:例如上午十点会流量激增至顶峰,那么下游资源可能会扛不住压力。但如果使用消息队列,就可以将消息暂存在消息管道中,下游可以按照自己的速度逐步处理;

可扩展:通过横向扩展生产者、消费者和broker, Kafka可以轻松处理巨大的消息流;

高吞吐、低延迟:在一台普通的服务器上既可以达到10W/s的吞吐速率;

容灾性:kafka通过副本replication的设置和leader/follower的容灾机制保障了消息的安全性。

kafka的高吞吐、低延迟是如何实现的?

1.顺序读写

Kafka使用磁盘顺序读写来提升性能

顺序读写和随机读写性能对比:

顺序读随机读顺序写随机写
机械硬盘84.0MB/s0.033MB/s (512字节)79.0MB/s0.083MB/s (512字节)
固态硬盘220.7MB/s5.296MB/s(512字节)77.2MB/s10.203MB/s(512字节)

从数据可以看出磁盘的顺序读写速度远高于随机读写的速度,这是因为传统的磁头探针结构,随机读写时需要频繁寻道,也就需要磁头和探针频繁的转动,而机械结构的磁头和探针的位置调整是十分费时的,这就严重影响到硬盘的寻址速度,进而影响到随机写入速度。

Kafka的message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得Kafka写入吞吐量得到了显著提升 。每一个Partition其实都是一个文件 ,收到消息后Kafka会把数据插入到文件末尾。

2.页缓存(pageCache)

PageCache是系统级别的缓存,它把尽可能多的空闲内存当作磁盘缓存使用来进一步提高IO效率;

PageCache同时可以避免在JVM内部缓存数据,避免不必要的GC、以及内存空间占用。对于In-Process Cache,如果Kafka重启,它会失效,而操作系统管理的PageCache依然可以继续使用。

•producer把消息发到broker后,数据并不是直接落入磁盘的,而是先进入PageCache。PageCache中的数据会被内核中的处理线程采用同步或异步的方式定期刷盘至磁盘。

•Consumer消费消息时,会先从PageCache获取消息,获取不到才回去磁盘读取,并且会预读出一些相邻的块放入PageCache,以方便下一次读取。

•如果Kafka producer的生产速率与consumer的消费速率相差不大,那么几乎只靠对broker PageCache的读写就能完成整个生产和消费过程,磁盘访问非常少

3.零拷贝

正常过程:

1.操作系统将数据从磁盘上读入到内核空间的读缓冲区中

2.应用程序(也就是Kafka)从内核空间的读缓冲区将数据拷贝到用户空间的缓冲区中

3.应用程序将数据从用户空间的缓冲区再写回到内核空间的socket缓冲区中

4.操作系统将socket缓冲区中的数据拷贝到NIC缓冲区中,然后通过网络发送给客户端

在这个过程中,可以发现, 数据从磁盘到最终发出去,要经历4次拷贝,而在这四次拷贝过程中, 有两次拷贝是浪费的。

1.从内核空间拷贝到用户空间;

2.从用户空间再次拷贝到内核空间;

除此之外,由于用户空间和内核空间的切换,会带来Cpu上下文切换,对于Cpu的性能也会造成影响;

零拷贝省略了数据在内核空间和用户空间之间的重复穿梭;用户态和内核态切换时产生中断,耗时;

4.分区分段索引

Kafka的message是按topic分类存储的,topic中的数据又是按照一个一个的partition即分区存储到不同broker节点。每个partition对应了操作系统上的一个文件夹,partition实际上又是按照segment分段存储的。符合分布式系统分区分桶的设计思想。

通过这种分区分段的设计,Kafka的message消息实际上是分布式存储在一个一个小的segment中的,每次文件操作也是直接操作的segment。为了进一步的查询优化,Kafka又默认为分段后的数据文件建立了索引文件,就是文件系统上的.index文件。这种分区分段+索引的设计,不仅提升了数据读取的效率,同时也提高了数据操作的并行度。

5.批量处理

kafka发送消息不是一条一条发送的,而是批量发送,很大的提高了发送消息的吞吐量。

假设发送一条消息的时间是1ms,而此时的吞吐量就是1000TPS。但是假如我们将消息批量发送,1000条消息需要10ms,而此时的吞吐量就达到了1000*100TPS。而且这样也很大程度的减少了请求Broker的次数,提升了总体的效率。

kafka架构

基本概念

名词概念
Producer生产者(发送消息)
Consumer消费者(接收消息)
ConsumerGroup消费者组,可以并行消费同一topic中的消息
Broker一个独立的kafka服务器被称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出相应,返回已经提交到磁盘上的消息。可起到负载均衡、容错的作用。
Topic主题,一个队列,可理解为按照消息的逻辑分类将消息划分为不同的topic
Partitiontopic的物理分组,一个topic可以分为多个partition,每个partition是一个有序队列。可起到提高可扩展性,应对高并发场景的作用。
replica副本,为保证集群的高可用性,kafka提供副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower
leader每个分区多个副本的主节点,生产者发送数据的对象,以及消费者消费数据的对象都是leader
offset对于Kafka中的分区而言,它的每条消息都有唯一的offset,用来表示消息在分区中对应的位置。

架构图

Q1:Topic的分区及副本在broker上是如何分配的呢?

这里涉及到两个参数:

startIndex:第一个分区的第一个副本放置位置(P0-R0)

nextReplicaShift:其他分区的副本的放置是依次后移的,间隔距离就是 nextReplicaShift 值。

Q2:Kafka的架构是基于什么设计思想呢?

分治思想:

1. topic分治:对于kafka的topic,我们在创建之初可以设置多个partition来存放数据,对于同一个topic的数据,每条数据的key通过哈希取模被路由到不同的partition中(如果没有设置key,则根据消息本身取模),以此达到分治的目的。

2. partition分治:为了方便数据的消费,kafka将原始的数据转化为”索引+数据“的形式进行分治,将一个partition对应一个文件转变为一个partition对应多个人不同类型的文件,分别为:

•.index文件:索引文件,用来记录log文件中真实消息的相对偏移量和物理位置,为了减少索引文件的大小,使用了稀疏索引

•.log文件:用来记录producer写入的真实消息,即消息体本身;

•.timeindex文件:时间索引文件,类比.index文件,用来记录log文件中真实消息写入的时间情况,跟offset索引文件功能一样,只不过这个以时间作为索引,用来快速定位目标时间点的数据;

3. 底层文件分治:不能将partition全部文件都放入一套 ”.index+.log+.timeindex“ 文件中,因此需要对文件进行拆分。kafka对单个.index文件、.timeindex文件、.log文件的大小都有限定(通过不同参数配置),且这3个文件互为一组。当.log文件的大小达到阈值则会自动拆分形成一组新的文件,这种将数据拆分成多个的小文件叫做segment,一个log文件代表一个segment。

kafka工作流程

生产流程:

1.先从zk获取对应分区的leader在哪个broker

2.broker进程上的leader将消息写入到本地log中

3.follower从leader上拉取消息,写入到本地log,并向leader发送ACK

4.leader接收到所有的ISR中的Replica的ACK后,并向生产者返回ACK

消费流程:

1.每个consumer都可以根据分配策略,获得要消费的分区

2.获取到consumer对应的leader处于哪个broker以及offset

3.拉取数据

4.消费者提交offset

分区策略

相信上面的内容已经让大家大致了解了消息生产及消费的过程:一个topic内的消息会被发送到不同的分区以供不同的消费者拉取消息。

那么在这个过程中就涉及到了两个问题:

1.生产者按照什么策略将数据分配到分区中呢?

2.消费者按照什么策略去不同的分区拉取消息呢?

生产者分区策略

生产者写入消息到topic,Kafka将依据不同的策略将数据分配到不同的分区中:

1. 轮询分区策略

即按消息顺序进行分区顺序分配,是默认的策略,也是使用最多的策略,可以最大限度保证所有消息平均分配到一个分区;

key为null,则使用轮询算法均衡地分配分区;

2. 按key分区分配策略

key不为null,key.hash() % n

但是按照key决定分区有可能会造成数据倾斜

3. 随机分区策略

随机分区,不建议使用

4. 自定义分区策略

根据业务需要制定以分区策略

乱序问题在Kafka中生产者是有写入策略,如果topic有多个分区,就会将数据分散在不同的partition中存储当partition数量大于1的时候,数据(消息)会打散分布在不同的partition中如果只有一个分区,消息是有序的

消费者分区策略

同一时刻,一条消息只能被组中的一个消费者实例消费:

1.消费者数=分区数:一个分区对应一个消费者

2.消费者数<分区数:一个消费者对应多个分区

3.消费者数>分区数:多出来的消费者将不会消费任何消息

分区分配策略:保障每个消费者尽量能够均衡地消费分区的数据,不能出现某个消费者消费分区的数量特别多,某个消费者消费的分区特别少

1. Range分配策略(范围分配策略):Kafka默认的分配策略

计算公式:

n=分区数量/消费者数量

m=分区数量%消费者数量

前m个消费者消费n+1个,剩余消费者消费n个

以上图为例:n=8/3=2m=8%3=2因此前2个消费者消费2+1=3个分区,剩下1个消费者消费2个分区

2. RoundRobin分配策略(轮询分配策略)

消费者挨个分配消费的分区:

如下图,3个消费者共同消费8个分区

第一轮:Consumer0-->A-Partition0;Consumer1-->A-Partition1;Consumer2-->A-Partition2

第二轮:Consumer0-->A-Partition3;Consumer1-->B-Partition0;Consumer2-->B-Partition1

第三轮:Consumer0-->B-Partition2;Consumer1-->B-Partition3

3. Striky粘性分配策略

在没有发生rebalance跟轮询分配策略是一致的

发生了rebalance(例如Consumer2故障宕机),轮询分配策略,重新走一遍轮询分配的过程。而粘性会保证跟上一次的尽量一致,只是将新的需要分配的分区,均匀的分配到现有可用的消费者中即可,这样就减少了上下文的切换

副本的ACK机制

producer是不断地往Kafka中写入数据,写入数据会有一个返回结果,表示是否写入成功。这里对应有一个ACKs的配置。

•acks = 0:生产者只管写入,不管是否写入成功,可能会数据丢失。性能是最好的

•acks = 1:生产者会等到leader分区写入成功后,返回成功,接着发送下一条

•acks = -1/all:确保消息写入到leader分区、还确保消息写入到对应副本都成功后,接着发送下一条,性能是最差的

根据业务情况来选择ack机制,是要求性能最高,一部分数据丢失影响不大,可以选择0/1。如果要求数据一定不能丢失,就得配置为-1/all。

分区中是有leader和follower的概念,为了确保消费者消费的数据是一致的,只能从分区leader去读写消息,follower做的事情就是同步数据。

Q&A:

1. offset存在哪里?

0.9版本前默认存在zk,但是由于频繁访问zk,zk需要一个一个节点更新offset,不能批量或分组更新,导致offset更新成了瓶颈。

在新版 Kafka 以及之后的版本,Kafka 消费的offset都会默认存放在 Kafka 集群中的一个叫 __consumer_offsets 的topic中。offset以消息形式发送到该topic并保存在broker中。这样consumer提交offset时,只需连接到broker,不用访问zk,避免了zk节点更新瓶颈。

2.leader选举策略?

2种leader:①broker的leader即controller leader ② partition的leader

1.Controller leader:当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。当leader故障后,所有的follower会收到通知,再次竞争在该路径下创建节点从而选举新的leader

2.Partition leader :由controller leader执行

•从Zookeeper中读取当前分区的所有ISR(in-sync replicas)集合

•调用配置的分区选择算法选择分区的leader

如何处理所有Replica都不工作?在ISR中至少有一个follower时,Kafka可以确保已经commit的数据不丢失,但如果某个Partition的所有Replica都宕机了,就无法保证数据不丢失了。这种情况下有两种可行的方案:等待ISR中的任一个Replica“活”过来,并且选它作为Leader选择第一个“活”过来的Replica(不一定是ISR中的)作为Leader这就需要在可用性和一致性当中作出一个简单的折衷。如果一定要等待ISR中的Replica“活”过来,那不可用的时间就可能会相对较长。而且如果ISR中的所有Replica都无法“活”过来了,或者数据都丢失了,这个Partition将永远不可用。选择第一个“活”过来的Replica作为Leader,而这个Replica不是ISR中的Replica,那即使它并不保证已经包含了所有已commit的消息,它也会成为Leader而作为consumer的数据源(前文有说明,所有读写都由Leader完成)。Kafka0.8.*使用了第二种方式。根据Kafka的文档,在以后的版本中,Kafka支持用户通过配置选择这两种方式中的一种,从而根据不同的使用场景选择高可用性还是强一致性。

3.分区可以提高扩展性以及吞吐量,那分区越多越好吗?

分区并不是越多越好,分区过多存在着以下弊端:

•producer内存成本增大、consumer线程开销增大partition是kafka管理数据的基本逻辑组织单元,越多的partition意味着越多的数据存储文件(一个partition对应至少3个数据文件)

•分区增多数据连续性下降

•可用性降低

4.与数据库相比kafka的优势?

•业务场景不同,底层数据结构不同,kafka数据存储对于功能要求较少,因此读写更快kafka存储数据(消息本身)的文件的数据结构是数组,数组的特点就是:数据间位置连续,如果按照顺序读取,或者追加写入的话,其时间复杂度为O(1),效率最高。

5.消费偏移的更新方式 无论是kafka默认api,还是java的api,offset的更新方式都有两种:自动提交和手动提交

1.自动提交(默认方式)

Kafka中偏移量的自动提交是由参数enable_auto_commit和auto_commit_interval_ms控制的,当enable_auto_commit=True时,Kafka在消费的过程中会以频率为auto_commit_interval_ms向Kafka自带的topic(__consumer_offsets)进行偏移量提交,具体提交到哪个Partation:Math.abs(groupID.hashCode()) % numPartitions。

这种方式也被称为at most once,fetch到消息后就可以更新offset,无论是否消费成功。

2. 手动提交

鉴于Kafka自动提交offset的不灵活性和不精确性(只能是按指定频率的提交),Kafka提供了手动提交offset策略。手动提交能对偏移量更加灵活精准地控制,以保证消息不被重复消费以及消息不被丢失。

对于手动提交offset主要有3种方式:

同步提交:提交失败的时候一直尝试提交,直到遇到无法重试的情况下才会结束,同步方式下消费者线程在拉取消息会被阻塞,在broker对提交的请求做出响应之前,会一直阻塞直到偏移量提交操作成功或者在提交过程中发生异常,限制了消息的吞吐量。

异步提交:异步手动提交offset时,消费者线程不会阻塞,提交失败的时候也不会进行重试,并且可以配合回调函数在broker做出响应的时候记录错误信息。 对于异步提交,由于不会进行失败重试,当消费者异常关闭或者触发了再均衡前,如果偏移量还未提交就会造成偏移量丢失。

异步+同步:针对异步提交偏移量丢失的问题,通过对消费者进行异步批次提交并且在关闭时同步提交的方式,这样即使上一次的异步提交失败,通过同步提交还能够进行补救,同步会一直重试,直到提交成功。 通过finally在最后不管是否异常都会触发consumer.commit()来同步补救一次,确保偏移量不会丢失

kafka概念扫盲 一、kafka概述 1.1、定义 Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域 1.2、消息队列 1.2.1、传统的消息队列&新式的消息队列的模式 上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他流程,比如发送短信,则需要等这些流程处理完成后,在返回给用户 而新式的队列是,比如一个用户注册... 阅读详情

相关推荐

MacOS新手必看:HomeBrew安装避坑指南(含M1芯片适配方案)

本文为MacOS新手提供全面的HomeBrew安装指南,特别包含M1/M2芯片适配方案。从系统准备到核心安装流程,再到日常维护和高级配置,详细解析每个步骤的潜在问题及解决方案,帮助用户高效管理Mac软件。

weixin_28831399的博客 471

Kafka

一、基础概念 关键术语 1.主题(topic):一个 topic 里保存的是同一类消息,相当于对消息的分类,每个 producer 将消息发送到 kafka 中,都需要指明要存的 topic 是哪个,也就是指明这个消息属于哪一类。 2.分区(partition):每个 topic 都可以分成多个 partition,每个 partition 在存储层面是 append log 文件。任何发布到此 partition 的消息都会被直接追加到 log 文件的尾部。为什么要进行分区呢?最根本的原因就.

sinat_34814635的博客 1万+

从0开始学GEE python——Google Earth Engine (GEE) 和 geemap 库来获取 Sentinel-2 卫星影像,并将其可视化

这段代码的目的是从 Sentinel-2 卫星影像中获取特定地点的影像,并将其可视化在地图上。通过设置合适的波段和可视化参数,用户可以清晰地查看该地区的卫星影像。

此星光明博客 1167

一篇文章学会Kafka

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

m0_57697768的博客 537

【Unity】Unity 跨平台及编译过程

早期的Unity跨平台是基于MONO运行时的,又通过CLS实现了跨语言。其基本思路是将各个版本的语言统一编译成CIL语言,在不同平台运行时使用CLR进行解释。有点类似于Java的jdk和jvm。 CLS(Common Language System)通用语言规范:CLS是一种规范,类似于schema,当文件被指定遵守CLS规范后,在某语言中写出不符合通用规范的代码后将被警告或报错。 MONO是一个开源工程,其中包含C#编译器,CLR运行时,以及一组类库。该工程常见了一系列符合ECMA标准的.NET工具,MO

一个普普通通的游戏开发者 7242

微带线,带状线和接地共面波导的区别

微带线,带状线和接地共面波导的区别

sky_ying的博客 3万+

扫盲Kafka?看这一篇就够了! | 京东云技术团队

如何处理所有Replica都不工作?Controller leader:当broker启动的时候,都会创建KafkaController对象,但是集群中只能有一个leader对外提供服务,这些每个节点上的KafkaController会在指定的zookeeper路径下创建临时节点,只有第一个成功创建的节点的KafkaController才可以成为leader,其余的都是follower。而粘性会保证跟上一次的尽量一致,只是将新的需要分配的分区,均匀的分配到现有可用的消费者中即可,这样就减少了上下文的切换。

JDDTechTalk的博客 595

UR5 机械臂手眼标定(Eye-in-Hand)实战:OpenCV 求解 AX=XB,误差 < 2mm

本文详细介绍了UR5机械臂在Eye-in-Hand配置下的手眼标定实战,通过OpenCV实现高精度标定,最终达到误差小于2mm的工业级精度要求。文章涵盖了标定基础原理、环境搭建、数据采集策略、核心算法实现及误差分析与优化,为视觉机械臂的自主抓取提供了实用指南。

weixin_31476015的博客 297

kafka扫盲-入门

Kafka入门指南摘要 Kafka是一款分布式消息引擎与流处理平台,广泛应用于企业消息总线、实时数据管道等场景。该指南从四个方面介绍Kafka:1)基础架构与术语,包括生产者、消费者、Broker等核心组件;2)高吞吐的消息发送机制,详解异步发送、批量处理和重试机制;3)高可用副本机制,阐述ISR集合和Unclean选举原理;4)集群控制器,说明基于Zookeeper的选举过程。文章还包含Kafka的分布式特性、持久化存储等优势分析,以及参数配置建议,为初学者提供了全面的入门知识。

小谷的博客 1433

(王道408考研操作系统)第一章计算机系统概述-第三节2:中断和异常

注意!!! 本节内容和《计算机组成原理》中的中断有重合,如果需要详细了解的话可以点击链接跳转:(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式 为了内容完整,部分内容会借用上述文章 文章目录一:中断和异常的基本概念(1)中断和异常的定义 一:中断和异常的基本概念 在操作系统引入核心态和用户态这两种工作状态后,就需要考虑两种状态之间是如何切换的。 操作系统内核工作在核心态,用户程序工作在用户态,系统不允许用户程序使用核心态的功能,但是用户程序为了完成某些操作又必须使用这些功能

快乐江湖的博客 3535

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 778

kafka扫盲-思考与实现

微信搜【假装懂编程】,与作者零距离交流 由于工作中经常用到kafka,但是对kafka的一些内部机制不是很熟悉,所以最近在看kafka相关的知识,我们知道kafka非常经典的消息引擎,它以高性能、高可用著称。那么问题来了,它是怎么做到高性能、高可用的?它的消息是以什么样的形式持久化的?既然写了磁盘,为何速度还那么快?它是如何保证消息不丢失的...?带着这一系列的问题,我们来扒开kafka的面纱。 首先我们思考这样一个问题:为什么需要消息引擎?为什么不能直接走rpc? 以一个订单系统为例:当我们下了一.

假装懂编程的博客 4702

YOLOv11涨点改进 | Neck改进篇 | YOLOv11引入 BiFPN双向特征金字塔网络,显著提升了多尺度特征融合效率

本文介绍了基于BiFPN特征融合模块优化的YOLOv11目标检测模型。BiFPN通过双向跨尺度连接和加权特征融合机制,显著提升了多尺度特征融合效率。该方法在COCO数据集上实现了55.1AP的检测精度,同时大幅降低计算成本(减少13-42倍FLOPs)。文章详细解析了BiFPN模块结构、核心代码实现方法,并提供了YOLOv11-BiFPN配置文件的修改指导,为计算机视觉领域提供了一种高效的目标检测解决方案。

Ai缝合怪、助力小伙伴高效发论文 718

kafka查看topic中的数据_kafka概念扫盲

一、kafka概述1.1、定义Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域1.2、消息队列1.2.1、传统的消息队列&新式的消息队列的模式上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他流程,比如发送短信,则需要等这些流程处理完成后,在返回给用户而新式的队列是,比如一个用户...

weixin_39885469的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

kafka扫盲

Kafka基本架构 如上图所示,一个典型的Kafka体系架构包括: 若干Producer(可以是服务器日志,业务数据,页面前端产生的page view等等), 若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高), 若干Consumer (Group),以及一个Zookeeper集群(将被移除)。 每个 Broker 中又包含了 Topic 以及 Partition 这两个重要的概念 Topic(主题) : Producer 将消息发送到特定的主题,Consumer

四美的博客 555

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

kafka扫盲篇

1.kafka是什么? kafka是一个消息中间件,是一种分布式消息发布--订阅系统。它的作用可以通过一个例子来粗略理解: 例:有两个角色,生产者---用于生产鸡蛋、消费者---消费鸡蛋,生产者直接把生产的鸡蛋提供给消费者,考虑几个情景: i)如果生产者一单位时间内生产一个鸡蛋,而消费者一单位时间内消费一个鸡蛋,则该过程可以顺利进行; ii)如果生产者生产一个鸡...

donger__chen的博客 315

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

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

kafka不使用自带zk_kafka概念扫盲

一、kafka概述1.1、定义Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域1.2、消息队列1.2.1、传统的消息队列&新式的消息队列的模式上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他流程,比如发送短信,则需要等这些流程处理完成后,在返回给用户而新式的队列是,比如一个用户...

weixin_35801437的博客 1553

Kafka 扫盲贴

10 kafka 10.0 Broker 10.0.1 Topic topic无法保证消息的有序性 10.1 生产者(Producer) 10.1.1 消息不丢失 #解决producer生产的消息在收到kafka 正确保存的ACK后由于卡夫卡服务宕机导致的消息丢失 1 ACK设置为ALL可以解决副本一致性问题 2 精准一次性引入SEQ,解决已保存但未ACK此时Leader挂掉,但是生产者仍重试导致的重复问题,用SEQ可以进行过滤 3 加入事务可以保证,由于生产者宕机导致的,PID变化进而无法验证SEQ

baidu_31405631的博客 1317

Kafka扫盲理论

消息系统原理 一个消息系统负责将数据从一个应用传递到另一个应用,应用只需要关注数据,无需关注数据在两个或多个应用间是如何传递的 点对点消息传递 在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费者获取消费队列中的数据。但是一条消息只能被消费一次。 当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。 该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。 基于推送模型的消息系统,由消息代理记录消费状态。 发布订阅消息传递 在发布-订阅消息系统中,消息被持久

戴林峰的博客 309

【kafla扫盲】FROM GPT

将不同来源的日志数据集中到 Kafka 中,再批量存入 HDFS 或 Elasticsearch。,最早由 LinkedIn 开发,后来开源并捐赠给 Apache 基金会。通过 Kafka 连接流处理框架(如 Spark Streaming、Flink)。作为消息中间件,替代传统 MQ(如 RabbitMQ)。如果有更多 Kafka 使用或调优问题,请随时联系我!Kafka 是目前流处理和消息中间件的。Kafka 中用于存放和组织消息的。收集服务器日志、应用监控数据。Kafka 集群中的。

m0_48165967的博客 783

Kafka运维&&开发扫盲(1)

开发的时候经常使用kafka来解耦自己的代码,运维中的kafka 大多数也是稳定就不管了,大致记录一下一些基本概念和常见的优化方案,以及代码的常规使用方式。 概念扫盲 基本体系架构: producer + broker + consumer + zk集群 producer: 生产者, 用于生产消息 Broker: 服务代理,可以理解为kafka集群的服务器,通常一台机器部署一个Kafka实例 consumer: 消费者, 用于消费消息 consumer group: 多个consumer组成一个con.

zyxpaomian的博客 362

kafka基础知识扫盲

kafka的主题会分为多个区,生产者发送到kafka的同一主题的消息会分散到多个区,这其中有几个策略 实现的原理也很简单 List<PartitionInfo> partitions = cluster.partitionsForTopic(topic); return Math.abs(key.hashCode()) % partitions.size(); 简单来说是通...

hw120219的博客 368
上一篇: MySQL面试题(一)
下一篇: MySQL面试题(二)
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值