kafka基础知识(二)

kafka原理及面试套路 kafka原理及面试套路一、 面试:1、列举kafka的使用场景2、Kafka消息是采用Pull模式,还是Push模式?3、 Kafka 与传统消息系统之间有三个关键区别4. Kafka中是怎么体现消息顺序性的?5、Kafka生产者客户端中使用了几个线程来处理?分别是什么?6、Kafka中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什么?7、 “消费组中的消费者个数如果超过topic的... 阅读详情

kafka 提供了两套 consumer API:

1. The high-level Consumer API
2. The SimpleConsumer API

 其中 high-level consumer API 提供了一个从 kafka 消费数据的高层抽象,而 SimpleConsumer API 则需要开发人员更多地关注细节。

1.1 The high-level consumer API

high-level consumer API 提供了 consumer group 的语义,一个消息只能被 group 内的一个 consumer 所消费,且 consumer 消费消息时不关注 offset,最后一个 offset 由 zookeeper 保存。

使用 high-level consumer API 可以是多线程的应用,应当注意:

1. 如果消费线程大于 patition 数量,则有些线程将收不到消息
2. 如果 patition 数量大于线程数,则有些线程多收到多个 patition 的消息
3. 如果一个线程消费多个 patition,则无法保证你收到的消息的顺序,而一个 patition 内的消息是有序的

1.2 The SimpleConsumer API

如果你想要对 patition 有更多的控制权,那就应该使用 SimpleConsumer API,比如:

1. 多次读取一个消息
2. 只消费一个 patition 中的部分消息
3. 使用事务来保证一个消息仅被消费一次

 但是使用此 API 时,partition、offset、broker、leader 等对你不再透明,需要自己去管理。你需要做大量的额外工作:

1. 必须在应用程序中跟踪 offset,从而确定下一条应该消费哪条消息
2. 应用程序需要通过程序获知每个 Partition 的 leader 是谁
3. 需要处理 leader 的变更

 使用 SimpleConsumer API 的一般流程如下:

1. 查找到一个“活着”的 broker,并且找出每个 partition 的 leader
2. 找出每个 partition 的 follower
3. 定义好请求,该请求应该能描述应用程序需要哪些数据
4. fetch 数据
5. 识别 leader 的变化,并对之作出必要的响应

 

1.2 consumer group

如 2.2 节所说, kafka 的分配单位是 patition。每个 consumer 都属于一个 group,一个 partition 只能被同一个 group 内的一个 consumer 所消费(也就保障了一个消息只能被 group 内的一个 consuemr 所消费),但是多个 group 可以同时消费这个 partition。

kafka 的设计目标之一就是同时实现离线处理和实时处理,根据这一特性,可以使用 spark/Storm 这些实时处理系统对消息在线处理,同时使用 Hadoop 批处理系统进行离线处理,还可以将数据备份到另一个数据中心,只需要保证这三者属于不同的 consumer group。如下图所示:

 

 

1.3 消费方式

consumer 采用 pull 模式从 broker 中读取数据。

push 模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。

对于 Kafka 而言,pull 模式更合适,它可简化 broker 的设计,consumer 可自主控制消费消息的速率,同时 consumer 可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义。

1.4 consumer delivery guarantee

如果将 consumer 设置为 autocommit,consumer 一旦读到数据立即自动 commit。如果只讨论这一读取消息的过程,那 Kafka 确保了 Exactly once。

但实际使用中应用程序并非在 consumer 读取完数据就结束了,而是要进行进一步处理,而数据处理与 commit 的顺序在很大程度上决定了consumer delivery guarantee:

1.读完消息先 commit 再处理消息。
    这种模式下,如果 consumer 在 commit 后还没来得及处理消息就 crash 了,下次重新开始工作后就无法读到刚刚已提交而未处理的消息,这就对应于 At most once
2.读完消息先处理再 commit。
    这种模式下,如果在处理完消息之后 commit 之前 consumer crash 了,下次重新开始工作时还会处理刚刚未 commit 的消息,实际上该消息已经被处理过了。这就对应于 At least once。
3.如果一定要做到 Exactly once,就需要协调 offset 和实际操作的输出。
    精典的做法是引入两阶段提交。如果能让 offset 和操作输入存在同一个地方,会更简洁和通用。这种方式可能更好,因为许多输出系统可能不支持两阶段提交。比如,consumer 拿到数据后可能把数据放到 HDFS,如果把最新的 offset 和数据本身一起写到 HDFS,那就可以保证数据的输出和 offset 的更新要么都完成,要么都不完成,间接实现 Exactly once。(目前就 high-level API而言,offset 是存于Zookeeper 中的,无法存于HDFS,而SimpleConsuemr API的 offset 是由自己去维护的,可以将之存于 HDFS 中)

总之,Kafka 默认保证 At least once,并且允许通过设置 producer 异步提交来实现 At most once。而 Exactly once 要求与外部存储系统协作,幸运的是 kafka 提供的 offset 可以非常直接非常容易得使用这种方式。

1.5 consumer rebalance

当有 consumer 加入或退出、以及 partition 的改变(如 broker 加入或退出)时会触发 rebalance。consumer rebalance算法如下:

1. 将目标 topic 下的所有 partirtion 排序,存于PT
2. 对某 consumer group 下所有 consumer 排序,存于 CG,第 i 个consumer 记为 Ci
3. N=size(PT)/size(CG),向上取整
4. 解除 Ci 对原来分配的 partition 的消费权(i从0开始)
5. 将第i*N到(i+1)*N-1个 partition 分配给 Ci

在 0.8.*版本,每个 consumer 都只负责调整自己所消费的 partition,为了保证整个consumer group 的一致性,当一个 consumer 触发了 rebalance 时,该 consumer group 内的其它所有其它 consumer 也应该同时触发 rebalance。这会导致以下几个问题:

1.Herd effect
  任何 broker 或者 consumer 的增减都会触发所有的 consumer 的 rebalance
2.Split Brain
  每个 consumer 分别单独通过 zookeeper 判断哪些 broker 和 consumer 宕机了,那么不同 consumer 在同一时刻从 zookeeper 看到的 view 就可能不一样,这是由 zookeeper 的特性决定的,这就会造成不正确的 reblance 尝试。
3. 调整结果不可控
  所有的 consumer 都并不知道其它 consumer 的 rebalance 是否成功,这可能会导致 kafka 工作在一个不正确的状态。
Kafka消息模型与工作原理详解 Kafka作为一个强大的分布式流处理平台,在大数据领域中发挥着重要的作用。它的高吞吐量、可扩展性、持久性等特点,使其能够满足各种复杂的应用场景需求。无论是日志收集、流式处理,还是消息系统和事件驱动架构,Kafka都能提供高效、可靠的解决方案。随着大数据技术的不断发展,Kafka的应用前景也将更加广阔。如果你还没有尝试过Kafka,不妨在自己的项目中使用一下,相信它会给你带来意想不到的惊喜。 阅读详情

相关推荐

简单分析KafKa工作原理

架构图 Producer:Producer即生产者,消息的产生者,是消息的入口。 kafka cluster: Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等…… Topic:消息的主题,可以理解为消息的分类,kafka的数据就保存在topic。在每个broker上都可以创建多个topic。 Partition:Topic的

weixin_43966635的博客 2983

Kafka!(多图+深入)原理详解

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

ytp552200ytp的博客 1万+

Kafka基础知识详细介绍

Kafka是一个分布式的流处理平台,最初由LinkedIn开发并贡献给Apache软件基金会。Kafka可以用作消息队列、日志存储、数据管道、流处理等场景,广泛应用于大数据和实时数据流处理系统中。Kafka的核心特性是高吞吐量、可扩展性、容错性和低延迟,特别适合处理高频次、大规模的数据流。Kafka生产者负责将消息从客户端应用程序传递到Kafka集群中的Topic。生产者通过将消息发送到KafkaBroker的某个Partition,并等待相应的确认来完成消息传递。消息发送成功与否。

王多鱼的梦想 1690

Kafka的工作原理

pull模式的不足之处在于,如果kafka没有数据,消费者会陷入空循环中,针对这一点,Kafka的消费者会在消费时传入timeout参数,如果当前Kafka中没有数据,消费者会等待一个timeout时长再返回。,会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步,等该follower大于partition的HW时,即follower追上leader时,就可以重新加入ISR了。

wulianwang001的专栏 7387

一维光子晶体态密度计算与应用解析

态密度(DOS)是凝聚态物理和光子学中的核心概念,描述了量子态在能量空间的分布规律。基于麦克斯韦方程组的周期性介电结构分析表明,一维光子晶体通过布拉格散射形成光子带隙,其态密度曲线呈现典型的范霍夫奇点和禁带特征。这种特性使光子晶体在光学工程中具有重要价值,特别是在滤波器设计和传感器开发领域。通过转移矩阵法等数值计算手段,可以精确预测带隙位置和宽度,其中折射率对比度与周期数是关键设计参数。实际应用中,1550nm通信波段滤波器常采用Si/SiO2交替结构,而引入缺陷层则能产生高Q值缺陷模。计算优化时需注意数值

weixin_36487018的博客 193

保姆级教程:用BMS的HVIL检测电路,手把手教你排查高压互锁故障(附PWM/直流源方案对比)

本文详细解析了BMS中的HVIL检测电路,通过对比直流源与PWM两种方案,提供了一套系统化的高压互锁故障诊断流程。从电路原理到实战技巧,帮助维修人员精准定位故障根源,提升电动汽车高压系统的安全性和可靠性。

weixin_29300241的博客 392

Kafka基础知识(二)

Kafka进阶知识 消息概念 消息指的是通信的基本单位。由消息生产者(producer)发布关于某个话题(topic)的消息。简单来说:消息以一种物理方式被发送给了作为代理(broker)的服务器(可能是另外一台机器)。若干的消息使用者(consumer)订阅(subscribe)某个话题,然后生产者所发布的每条消息都会被发送给所有的使用者。 Kafka的生产者、使用者和代理都可以运行在作为一个逻...

weixin_30765319的博客 102

【逆向实战入门】Lua Hook进阶:从函数拦截到流程控制的实战解析

本文深入解析Lua Hook技术的进阶应用,从基础函数拦截到复杂流程控制,提供实战技巧与避坑指南。通过保存原函数指针、条件性Hook及调用栈分析等高级方法,帮助开发者在游戏辅助、自动化工具等场景中精准控制程序行为,同时确保稳定性和反检测能力。

weixin_30613343的博客 331

Kafka学习记录 (二) ----基础知识梳理2

kafka 博客内容东拼西凑,以下全文内容整理自极客时间专栏,非原创 文章目录kafka博客内容东拼西凑,以下全文内容整理自极客时间专栏,非原创一)消费者位移1 . 对不不同版本的kafka维护offset方式1.1 老版本:1.2 新版本:1.2.1 __consumer_offsets :位移主题1.2.1.1 __consumer_offsets 什么时候创建的?1.2.1.2 __consumer_offsets 分区数怎么设置?1.2.1.3 __consumer_offsets 副本数或备份因子

Lcy 515

temu登录接口逆向分析(含Py纯算)

【代码】temu登录接口逆向分析(含Py纯算)

数据精灵喵 1949

点云从入门到精通技术详解100篇-点云的特征检测(续)

对每个维度的序列分别计算 DTW 距离,最后。权重将距离限制在较小的范围内,对于时间跨度大的数据集,过度限制了点对点的路径,同的,因此不能用欧氏距离来计算两个多元时间序列之间的距离,本文选用的是动态时。到的股票数据是未知分类的,因此该数据的相似性分析缺少有效的评价方式,通常需要。时间序列,简而言之,就是与时间相关的数据的集合,应用在生活工作中的方方面。时间序列的分段线性化表示的难点在于如何找出分段点,目前,对于分段点的研究。经过分段线性化之后,每个多元时间序列的维度是相同的,但是每一维的长度是不。

getusushu的博客 334

Kafka创建Topic的两种方式

创建topic的两种方式: 方法一: bin/kafka-topics.sh --create --topic topicname --replication-factor 1 --partitions 1 --zookeeper localhost:2181 -topic 指定topic -partitions指定分区数 kafka通过分区策略,将不同的分区分配在一个集群中的broker上,一般会分散在不同的broker上,当只有一个broker时,所有的分区就只能分配到该broker上。 消息会通过浮

weixin_47681855的博客 3万+

Silly Tavern酒馆ai角色卡与世界书导入超详细教程!

前几天,我在设置 Silly Tavern 的时候,想导入一个喜欢的角色卡,结果发现不少朋友其实已经下载好了角色资源,但却不知道怎么正确导入使用。这篇文章就作为一份完整的新手向教程,一步步教你如何在 Silly Tavern 中导入角色卡、世界书,并实现与 AI 角色的真实互动。如果你是第一次接触这个功能,建议先收藏慢慢看~点击菜单栏上的 图标,打开角色界面。初始状态下,你应该只看到默认角色 Seraphina。你可以先点击她的头像尝试聊天,也可以导入自己喜欢的角色。点击导入按钮,选择你下载好的角色卡(通

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2万+

kafka小白基础知识

Kafka 是一个开源的分布式流处理平台,最初由 LinkedIn 开发,后来贡献给了 Apache 软件基金会。它被设计用于处理实时数据流,具有高吞吐量、可扩展性、持久性和容错性等特点。Kafka 主要用于构建实时数据管道和流式应用程序,如日志收集、消息系统、事件驱动架构等。

weixin_44821805的博客 2047

AXI总线详解完结篇

经过几个月的整理和发文,AXI总线详解系列正式迎来最终篇,内容基本涵盖了上一篇文章的全部内容。 所有文章的链接如下: 1、 AXI总线详解 2、AXI总线详解-总线和接口以及协议 3、AXI协议中的通道结构 4、AXI总线详解-AXI4读写操作时序及AXI4猝发地址及选择 5、AXI4交换机制 6、ZYNQ中DMA与AXI4总线-DMA简介 7、AXI总线详解-不同类型的DMA 8、AXI总线详解-DMA内部寄存器的读写方式 9、AXI总线详解-几种应用DMA的场合 10、Altera Scatter-G.

OpenFPGA的博客 5493

SQL面试题——最大连续登陆问题

最大连续登陆是我们计算比较常用的指标,我们可以将其当成一个经典的SQL模型,后面我们也会陆续总结出其他的模型,你还知道其他的比较经典的SQL 吗?欢迎分享,或者你还知道其他的关于计算连续的指标?最大连续登陆重要的是计算思想,最大连续才是关键,登陆只是一个场景,要学会举一反三。

9013

【Kafka】Kafka 基础知识总结

Kafka其实是一款基于发布与订阅模式的消息系统,如果按常理来设计,大家是不是把消息发送者的消息直接发送给消息消费者?但Kafka并不是这么设计的,Kafka消息的生产者会对消息进行分类,再发送给中间的消息服务系统,而消息消费者通过订阅某分类的消息去接受特定类型的消息。

JavaSouth南哥 1275

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【Kafka基础】10个Kafka基础知识,面试经常会问到

前几天面试一个测试开发,问了Kafka的基础性知识,受试者没有回答出来,在项目中介绍有使用Kafka但是对kafka的基础知识掌握的却不牢固不全面,今天列出Kafka经常会问到的10个基础知识,供大家参考学习1)日志信息收集记录我个人接触的项目中,Kafka使用最多的场景,就是用它与FileBeats和ELK组成典型的日志收集、分析处理以及展示的框架该图为FileBeats+Kafka+ELK集群架构Kafka在框架中,作为消息缓冲队列2)用户轨迹跟踪:kafka经常被用来记录web用户或者app用户的各种

longxiaotian718的博客 1453

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kafka内容分享(一):Kafka 基础知识

当一个Broker接收到消息后,它会将消息保存到本地磁盘上,并将消息的副本发送给其他Broker。Kafka提供了消息过期时间的功能,在消息发送时可以指定消息过期时间,Kafka会自动删除已经过期的消息。在该命令中,--bootstrap-server指定Kafka服务器的地址,--topic指定要接收的消息主题。在该命令中,--broker-list指定Kafka服务器的地址,--topic指定消息的主题。Kafka的消息是持久化到磁盘上的,可以设置消息的过期时间来自动清理过期消息。

之乎者也·的博客 1313

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

kafka基础知识

kafuka基础知识 什么是kafka? Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的, 冗余备份的持久性的日志服务,它主要用于处理流式数据。 kafka的设计初衷: ​ 1.能够应对海量实时消息数据–高吞吐,低延时 ​ 2.需要有分布式的系统特征:高可用,水平扩展 kafka的核心概念,名词解释 1.Broker:代理,就是kafka的一台节点 2.Producer:生产者,向kafka推送消息的角色

D11_12的博客 1866

Kafka基础知识

命名规范使用小写字母使用连字符或下划线分隔单词包含业务领域信息包含数据类型信息分区数量考虑吞吐量需求考虑消费者并行度考虑未来扩展性一般建议:分区数 = 目标吞吐量 / 单个分区吞吐量副本因子生产环境至少为3考虑可用性需求考虑存储成本。

weixin_74417835的博客 1268

二、kafka项目实例

http://www.cnblogs.com/darkprince/p/5114425.html 开发Kafka通用数据平台中间件 (含本次项目全部代码及资源) 目录: 一. Kafka概述 二. Kafka启动命令 三.我们为什么使用Kafka 四. Kafka数据平台中间件设计及代码解析 五.未来Kafka开发任务   一. Kafka概述   Kafka是L

jenyzhang的专栏 2万+

kafka基础知识总结

Kafka是一个由Apache软件基金会开发的分布式流处理平台。它最初是为LinkedIn设计的,用于处理大规模的实时日志数据流。Kafka的设计目标是将实时流数据高效地发布、订阅和处理。Kafka是一个基于发布-订阅模式的消息队列系统,可以用于构建实时数据管道和流式处理应用程序。它采用可水平扩展的架构,能够处理大规模的消息流,并保证高吞吐量和低延迟。Topic(主题):消息发布的类别或名称。Producer(生产者):负责向指定的Topic发布消息。

qq_42746084的博客 1249
上一篇: kafka基础知识介绍
下一篇: kafka代码学习
Computer_hello
博客等级 码龄10年 2粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值