前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java高频面试题- 每日三连问?【Day35】 — Kafka篇(三)

Java高频面试题- 每日三连问?【Day35】 — Kafka篇(三)

作者头像
浩说编程
发布于 2022-04-12 06:23:23
发布于 2022-04-12 06:23:23
2800
举报
文章被收录于专栏:Java经验之谈Java经验之谈

问题导读

一、说说Kafka 如何保证消息的消费顺序?

二、Kafka 如何保证消息不丢失?

三、Kafka 判断一个节点是否还活着有哪两个条件?

01

说说Kafka 如何保证消息的消费顺序?

正经回答:

我们在使用消息队列的过程中经常有业务场景需要严格保证消息的消费顺序,比如我们同时发了 2 个消息,这 2 个消息对应的操作分别对应的数据库操作是:

 更改用户会员等级。

 根据会员等级计算订单价格。

假如这两条消息的消费顺序不一样造成的最终结果就会截然不同。

Kafka 中 Partition(分区)是真正保存消息的地方,我们发送的消息都被放在了这里。

而我们的 Partition(分区) 又存在于 Topic(主题) 这个概念中,并且我们可以给特定 Topic 指定多个 Partition。

每次添加消息到 Partition(分区) 的时候都会采用尾加法,如上图所示。

Kafka 只能为我们保证 Partition(分区) 中的消息有序。

消息在被追加到 Partition(分区)的时候都会分配一个特定的偏移量(offset)。

Kafka 通过偏移量(offset)来保证消息在分区内的顺序性。

所以,我们就有一种很简单的保证消息消费顺序的方法:

1 个 Topic 只对应一个Partition。

这样当然可以解决问题,但是破坏了 Kafka 的设计初衷。

Kafka 中发送 1 条消息的时候,可以指定 topic, partition, key,data(数据) 4 个参数。

如果你发送消息的时候指定了 Partition 的话,所有消息都会被发送到指定的 Partition。

并且,同一个 key 的消息可以保证只发送到同一个 partition,这个我们可以采用表/对象的 id 来作为 key 。

总结一下,对于如何保证 Kafka 中消息消费的顺序,有了下面两种方法:

 1 个 Topic 只对应一个 Partition。

 发送消息的时候指定 key/Partition。

分享朋友圈,记录学习每一天~

02

Kafka 如何保证消息不丢失?

正经回答:

生产者丢失消息的情况

生产者(Producer) 调用 send 方法发送消息之后,消息可能因为网络问题并没有发送过去。

所以,我们不能默认在调用 send 方法发送消息之后消息发送成功了。

为了确定消息是发送成功,我们要判断消息发送的结果。

但是要注意的是 Kafka 生产者(Producer) 使用 send 方法发送消息实际上是异步的操作,我们可以通过 get()方法获取调用结果,但是这样也让它变为了同步操作 。

消费者丢失消息的情况

我们知道消息在被追加到 Partition(分区)的时候都会分配一个特定的偏移量(offset)。

偏移量(offset)表示 Consumer 当前消费到的 Partition(分区)的所在的位置。

Kafka 通过偏移量(offset)可以保证消息在分区内的顺序性。

当消费者拉取到了分区的某个消息之后,消费者会自动提交了 offset。

自动提交的话会有一个问题,试想一下,当消费者刚拿到这个消息准备进行真正消费的时候,突然挂掉了,消息实际上并没有被消费,但是 offset 却被自动提交了。

解决办法也比较粗暴,我们手动关闭自动提交 offset,每次在真正消费完消息之后再自己手动提交 offset 。

但是,细心的朋友一定会发现,这样会带来消息被重新消费的问题。

比如你刚刚消费完消息之后,还没提交 offset,结果自己挂掉了,那么这个消息理论上就会被消费两次。

03

Kafka 判断一个节点是否还活着有哪两个条件?

正经回答:

 节点必须可以维护和 ZooKeeper 的连接,Zookeeper 通过心跳机制检查每个节点的连接;

 如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太久。

- End -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何使用简单的Python为数据科学家编写Web应用程序?
可以转到本地URL:localhost:8501在浏览器中,查看Streamlit应用程序的运行情况。开发人员提供了一些不错的演示,请花点时间并感觉一下工具的功能。
代码医生工作室
2019/11/14
2.9K0
独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码&链接)
作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家
数据派THU
2019/12/05
1.9K0
用Streamlit构建机器学习应用
Streamlit是一个开放源码的Python库,它可以轻松地为机器学习建模漂亮的应用程序。你可以很容易地通过pip在你的终端上安装它,然后开始用Python编写你的网络应用程序。
AiTechYun
2019/11/11
1.3K0
用Streamlit构建机器学习应用
干货分享 | 用Streamlit来制作数据可视化面板实战
在上回初步介绍了“steamlit”框架的基本用法之后(干货分享 | 用 Streamlit 来制作数据可视化面板教程(一)),这回我们动手来实践一下,用“streamlit”框架来制作一个可视化仪表盘,用到的数据是印度在新冠病毒的影响之下病例数据,包括了印度每个州的“死亡数据”、“治愈数据”、“确诊数据”以及“活跃病例”,感兴趣的童鞋也可以一起动手来实现一下。
用户6888863
2021/07/19
2.5K1
Streamlit 入门教程:构建一个Dashboard
Streamlit 是一个用于创建数据科学和机器学习应用程序的开源 Python 库。它的主要目标是使开发人员能够以简单的方式快速构建交互式的数据应用,而无需过多的前端开发经验。Streamlit 提供了一种简单的方法来转换数据脚本或分析代码为具有可视化界面的应用程序,这些应用程序可以通过网络浏览器访问。
deephub
2023/08/30
1.2K0
Streamlit 入门教程:构建一个Dashboard
一日一技:Python快速生成web动态展示项目
一句话,Streamlit是一个可以用python编写web app的库,可以方便的动态展示你的机器学习的项目。
用户8949263
2022/04/08
1.3K0
一日一技:Python快速生成web动态展示项目
一个神奇的Python机器学习交互应用开放框架
向大家推荐一款机器学习用户交互工具开发框架——Streamlit,可以使机器学习工程师能更轻松地创建自定义应用程序已在他们的模型中与数据进行交互。
统计学家
2019/11/07
5930
一个神奇的Python机器学习交互应用开放框架
不到100行Python代码教你做出精美炫酷的可视化大屏
“碳达峰、碳中和”是2021年政府在不断强调与非常重视的事儿,那什么是“碳达峰”、什么又是“碳中和”呢?这里小编来为大家科普一下,所谓的“碳达峰”指的是在某一时间点,二氧化碳的排放不再达到峰值,之后逐步回落。
用户6888863
2022/04/13
9910
不到100行Python代码教你做出精美炫酷的可视化大屏
情人节,我用 Python 给女朋友做了个选礼物看板!
一年 N 度的情人节又又又到了!各位程序猿们给女朋友准备礼物了吗?刚铁直男都存在一个困惑的问题:送女朋友什么礼物好?今天特意爬取了某东的数据,来分析下大家情人节都送什么给女朋友。
杰哥的IT之旅
2022/03/31
7170
情人节,我用 Python 给女朋友做了个选礼物看板!
Python 的一万种用法:制作 Web 可视化页面
本次小F给大家介绍一下如何用Python制作一个数据可视化网页,使用到的是Streamlit库,轻松将一个Excel数据文件转换为一个Web页面,提供给所有人在线查看。
AI科技大本营
2021/06/08
2.1K0
Python 的一万种用法:制作 Web 可视化页面
用Python制作销售数据可视化看板,展示分析一步到位!
主要使用Python的Streamlit库、Plotly库、Pandas库进行搭建。
小F
2021/11/23
2.2K0
如何优雅地展示机器学习项目!
很多数据科学工作者都存在这样一个痛点,由于没有能点亮网页前端的技能树,导致在项目展示或项目合作时,无法快速开发出这样一套用户界面以供使用。而今天要介绍的Streamlit正是为了应对这一痛点而生的。
Datawhale
2020/07/02
1.9K0
强大的项目-秒变 Python 脚本为 ML 工具
以我的经验来看,每一个不平凡的机器学习项目最终都会使用一个错漏百出的难以维护的内部工具进行缝合。而这些工具(通常是 Jupyter Notebook 或者 Flask App)往往都难以部署,通常需要对客户端和服务器架构进行整合,而且无法与 TesorFlow GPU 等机器学习框架进行很好的结合。
周萝卜
2020/05/22
8480
Streamlit,这是专为ML工程师打造的应用程序框架
每个不平凡的机器学习项目最终都将使用漏洞缠身且无法维护的内部工具进行缝合。这些工具(通常是Jupyter笔记本和Flask应用程序的拼凑而成)难以部署,需要对客户端-服务器体系结构进行推理,并且无法与Tensorflow GPU会话等机器学习结构很好地集成。
代码医生工作室
2019/11/12
2K0
有了这个开源项目,不会 Web 开发也能让数据“动”起来!
这里是 HelloGitHub 推出的《讲解开源项目》系列,今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来!
HelloGitHub
2021/06/24
2.3K0
有了这个开源项目,不会 Web 开发也能让数据“动”起来!
Streamlit:快速构建可视化网页(数据科学必备)
很多算法工程师在完成数据分析、模型训练或者项目总结的时候,往往只能通过ppt汇报,添加数据图表、截图模型实验结果等。如果想提供一个前端演示demo,通常可以搭建flask服务,但是flask需要学习很多前端知识,如css、html等,这又是一个深之又深的坑。那有没有什么工具能够跳过这些模块,直接提供一个可用的前端页面呢?答案是肯定的,今天给大家推荐一个轻量化、简单好用、快速上手的streamlit。
luckpunk
2023/09/29
2.2K0
Streamlit:快速构建可视化网页(数据科学必备)
python︱写markdown一样写网页,代码快速生成web工具:streamlit 重要组件介绍(二)
python︱写markdown一样写网页,代码快速生成web工具:streamlit(一)
悟乙己
2021/12/07
1.1K0
python︱写markdown一样写网页,代码快速生成web工具:streamlit 重要组件介绍(二)
【干货原创】面向小白的最全Python可视化教程,超全的!
今天小编总结归纳了若干个常用的可视化图表,并且通过调用plotly、matplotlib、altair、bokeh和seaborn等模块来分别绘制这些常用的可视化图表,最后无论是绘制可视化的代码,还是会指出来的结果都会通过调用streamlit模块展示在一个可视化大屏,出来的效果如下图所示
用户6888863
2022/04/13
5970
【干货原创】面向小白的最全Python可视化教程,超全的!
使用动态时间规整来同步时间序列数据
在数据相关的职业生涯中遇到最痛苦的事情之一就是必须处理不同步的时间序列数据集。差异可能是由许多原因造成的——日光节约调整、不准确的SCADA信号和损坏的数据等等。在相同的数据集中,在不同的点上发现几个差异是很常见的,这需要分别识别和纠正每一个差异。而且当使用它时,可能会无意中抵消另一个同步部分。幸运的是,在新的“动态时间规整”技术的帮助下,我们能够对所有的非同步数据集应用一种适用于所有解决方案。
deephub
2021/08/20
1.2K0
python︱写markdown一样写网页,代码快速生成web工具:streamlit 展示组件(三)
系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重要组件介绍(二) python︱写markdown一样写网页,代码快速生成web工具:streamlit 展示组件(三) python︱写markdown一样写网页,代码快速生成web工具:streamlit lay-out布局(四) python︱写markdown一样写网页,代码快速生成web工具:streamlit 缓存(五) python︱写markdown一样写网页,代码快速生成web工具:streamlit 数据探索案例(六) streamlit + opencv/YOLOv3 快速构建自己的图像目标检测demo网页(七)
悟乙己
2021/12/07
1.5K0
python︱写markdown一样写网页,代码快速生成web工具:streamlit 展示组件(三)
推荐阅读
相关推荐
如何使用简单的Python为数据科学家编写Web应用程序?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文