Kafka总结

还有spark调优等:https://www.cnblogs.com/junneyang/p/8267967.html
中文文档:http://kafka.apachecn.org/

1、Kafka特点:高吞吐,低延时
2、大多数消息队列(消息中间件)都是基于JMS(java message service)标准实现的,Apache Kafka 类似于JMS的实现
3、有什么用?(消息队列有什么用?)
答:作为缓冲,来异构、解耦系统。
用户注册需要完成多个步骤,每个步骤执行都需要很长时间。代表用户等待时间是所有步骤的累计时间。
为了减少用户等待的时间,使用并行执行执行,有多少个步骤,就开启多少个线程来执行。代表用户等待时间是所有步骤中耗时最长的那个步骤时间。
有了新得问题:开启多线程执行每个步骤,如果以一个步骤执行异常,或者严重超时,用户等待的时间就不可控了。
通过消息队列来保证。
注册时,立即返回成功。
4、Kafka的元数据都是存放在zookeeper中
5、分片机制解决了单机存储容量有限的问题

如何保证消息不丢失?
1_生产者端
(1)消息生产分为同步模式和异步模式
(2)消息确认分为三个状态
0:生产者只负责发送数据
1:某个partition的leader收到数据给出响应
-1:某个partition的所有副本都收到数据后给出响应
在同步模式下
生产者等待10S,如果broker没有给出ack响应,就认为失败;生产者重试3次,如果还没有响应,就报错。
在异步模式下
先将数据保存在生产者端的buffer中,Buffer大小是2万条;满足数据阈值或者数量阈值其中的一个条件就可以发送数据;发送一批数据的大小是500条。
如果broker迟迟不给ack,而buffer又满了,开发者可以设置是否直接清空buffer中的数据。
2_broker端
副本机制
3_消费者端
只要记录offset值,消费者端不会存在消息不丢失的可能,只会重复消费。

kafka存储、查询及offset问题
1、segment段中有两个核心的文件一个是log,一个是index。 当log文件等于1G时,新的会写入到下一个segment中。一个segment段差不多会存储70万条数据。
2、查询分两步:查segment file;查message。

kafka数据分发策略
kafka在数据生产的时候,有一个数据分发策略。默认的情况使用DefaultPartitioner.class类。
这个类中就定义数据分发的策略。
(1)如果是用户指定了partition,生产就不会调用DefaultPartitioner.partition()方法
(2)当用户指定key,使用hash算法。如果key一直不变,同一个key算出来的hash值是个固定值。如果是固定值,这种hash取模就没有意义。
Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions
(3)当用户既没有指定partition也没有指定key,使用轮询的方式发送数据。

消费者的负载均衡
一个partition只能被一个组中的成员消费。
所以如果消费组中有多于partition数量的消费者,那么一定会有消费者无法消费数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值