惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
A
About on SuperTechFans
宝玉的分享
宝玉的分享
小众软件
小众软件
T
Tor Project blog
The Hacker News
The Hacker News
WordPress大学
WordPress大学
IT之家
IT之家
L
LINUX DO - 热门话题
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Latest news
Latest news
Martin Fowler
Martin Fowler
F
Full Disclosure
爱范儿
爱范儿
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
W
WeLiveSecurity
C
Cisco Blogs
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - Franky
美团技术团队
N
Netflix TechBlog - Medium
Know Your Adversary
Know Your Adversary
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Help Net Security
雷峰网
雷峰网
G
Google Developers Blog
人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence
J
Java Code Geeks
Project Zero
Project Zero
Jina AI
Jina AI
P
Palo Alto Networks Blog
Vercel News
Vercel News
腾讯CDC
N
News | PayPal Newsroom
V
Visual Studio Blog
Cisco Talos Blog
Cisco Talos Blog
V
Vulnerabilities – Threatpost
AWS News Blog
AWS News Blog

博客园 - 有点懒惰的大青年

用一个实际业务场景演示ON和WHERE的正确使用方式 idea中查看源码 异或运算 使用Hutool对时间的花式操作 合并K个升序列表 比较器 枚举类的设计模式 spring boot中使用RedissonClient实现分布式锁 idea同时启动application,启用不同端口 @PostConstruct用法 ApplicationContext 事件发布与监听机制详解 java自带命令jps介绍 关于maven中标签的说明 mysql的跨库查询 linux命令ll显示结果的含义 Files类的使用 java环境变量设置 java值传递和引用传递 kafka的消费全流程 关于kafka 达梦数据库执行计划介绍 关于MQ 用位运算实现加减乘除(3)
kafka的集群与可靠性
有点懒惰的大青年 · 2025-06-04 · via 博客园 - 有点懒惰的大青年

kafka做集群的目标

高并发

高可用

动态扩容

./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic laoli --partitions 2 --replication-factor 2

topic:创建名为laoli的主题

partitions:该主题下2个分区

replication-factor:复制因子,因为有集群,这里写2。如果写1的话,就不存在复制副本了。也不能写3,因为只有两台服务器集群。

例如,一个主题下有两个分区,做两个复制因子,在broker1有,在broker2也有。分区0的首领是broker1,分区1的首领有可能就是broker2了。

查看topic详细信息:

以topic为laoli为例,Leader:后面的数字表示broker的id。数据的复制都是从leader首领副本,复制到follower跟随副本的。

创建生产者,topic名为laoli,发送消息:

./kafka-console-producer.sh --broker-list 192.168.40.115:9092 --topic laoli

创建消费者,topic名为laoli,消费消息:

./kafka-console-consumer.sh --bootstrap-server 192.168.40.115:9092 --topic laoli --from-beginning --consumer.config ../config/consumer.properties

kafka处理请求的内部机制:

作为生产也好,作为消费也好,所有的请求,发送或者消费,都应该放在首领所在的broker,比如往分区0发,要发往首领所在的broker,任意一台broker启动的时候,会在客户端获取一个元数据,(元数据:创建的主题,哪些是首领,分区,以及分区里面哪个是首领,类似于查看topic详细信息的这么一个元数据),并且元数据在任意一台broker上都有。所以最终进行生产或者消费的时候,都是客户端根据元数据缓存,发送到指定的首领所在的broker节点上来。非首领的分区上的数据来自于对应首领分区上的数据的复制。

发送确认的ACKS机制,三种模式:

1.acks=0,只要发出去了,不管确认(认为消息已经写入kafka)

2.acks=1,写入分区的副本数,只要写入1个就返回确认了。(先写到leader,然后再由leader同步到follower)

3.acks=all或-1,简单的理解全部(min.insync.replicas参数)都收到了,就返回确认。

总结:

1.追求性能,min.insync.replicas=1,leader同步成功返回成功;(leader宕机了,必然会丢数据)

2.min.insync.replicas = 3, 3个副本,3个副本的服务器,任意一台在发送消息时宕机了,返回发送不成功。

消费者来说,比较重要的参数:

1.group.id,消息的重复消费

2.auto.offset.reset,自动偏移量的设置,从哪里开始找,可以设置为earliest,latest,none,anything else。拉取消息的时候如果这个偏移量在broker上不存在,或者是第一次获取消息,那从哪里offset开始找消息呢?如果配置为latest,之前的消息就收不到了。如果配置的是earliest,必然有可能之前的消息已经消费过了,又把之前最老的消息从头再消费一次。

3.enable.auto.commit,自动提交,默认情况下自动提交的。也就是说只要消息通过poll方法拿到,拿到之后就会自动提交。但是有可能在这个过程中会发生错误,所以经常在确保消息不会发生丢失、重复时,尽量可以取消自动提交,交给程序进行手动提交,consumer.commitAsync()-异步,不会阻塞线程;consumer.commitSync()-同步,会阻塞线程,并且会重试。

4.auto.commit.interval.ms,和上面自动提交的参数相关,如果选择了默认自动提交,那这个参数表示多久提交一次,3.0的kafka版本默认是5秒提交一次。当然如果你这边消费的很快,可以设置快点,比如1ms提交一次,当然如果你提交的越频繁的话肯定会有额外的开销。

kafka的存储机制

基本的存储单位: 分区,同一个broker多个磁盘再划分,粒度就是分区。

在server.properties中有配置:

log.dirs=/tmp/kafka-logs  存储路径

--