赞
踩
高吞吐量、低延迟、高并发、高性能的消息中间件。Kafka 集群甚至可以做到每秒几十万、上百万的超高并发写入
磁盘顺序写(通过偏移量查找)+零拷贝技术+分区
kafka一个主题需要设置分区和分区副本数,一个分区有一个leader和对应的副本数-1个follower
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成
1.同步方式:
acks=0: producer 不等待 Leader 确认,只管发出即可;最可能丢失消息,适用于高吞吐可丢失的业务;
acks=1(默认值): producer 等待 Leader 写入本地日志后就确认;之后 Leader 向 Followers 同步时,如果 Leader 宕机会导致消息没同步而丢失,producer 却依旧认为成功;(延迟低)
acks=all/-1: producer 等待 Leader 写入本地日志、而且 Leader 向 Followers 同步完成后才会确认;最可靠。(延迟高)
2.异步方式:
优点是可批量发送消息(消息个数达到 batch.num.messages=200 或时间达到 “ 时发送)、吞吐量佳,缺点是发送不及时可能导致丢失;
消息重复根本原因:已经消费了数据,但是 offset 没提交。
外在原因:(1)消费数据后、提交 offset 前,线程被杀;
消息丢失根本原因:
(1)已经提交了 offset,但数据在内存中尚未处理,线程就被杀掉。
(2)生产者利用同步提交设置ack=0或者1的时候会出现
严格说,kafka是无法保证全局消息有序的,没有这个机制,只能分区内有序。
但是如果只有一个分片和一个消息的生产者,那么就相当于消息全局有序了。
如果有多个消息生产者,就算只有一个分片,如果这些生产者的消息都发给这个分片,那kafka中的消息连局部有序都没有办法了。
设当增加自动提交偏移量的时间,排查业务逻辑并优化业务处理速度。
同步模式下,确认机制设置为-1(不可为1),即让消息写入Leader和Follower之后再确认消息发送成功;
异步模式下,设置为不限制阻塞超时时间(不可为acks=0),当缓冲区满时不清空缓冲池,而是让生产者一直处于阻塞状态;
isr列表维护的是同一个分区所有跟得上leader同步速度的follower的副本分区,每个分区都会维护一个最大的LEO(数据偏移量),
isr列表里LEO最小的那个值被称为高水位,只有高水位之前的数据才可以被客户端访问到。
ISR的方式有效的权衡了数据的可靠性和性能之间的关系。
1.等待ISR中任一Replica(副本分区)恢复,并选它为Leader。(默认模式)
或ISR中的所有Replica都无法恢复或者数据丢失,则该Partition将永不可用(可用性低)
2.选择第一个恢复的Replica为新的Leader,无论它是否在ISR中
并未包含所有已被之前Leader Commit过的消息,因此会造成数据丢失(可用性高)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。