学习任务问题反馈
1.kafka消息数据如何存储?
2.kafka如何保证有序,生产者有序,消费者有序
3.kafka主从同步,如何进行选主
4.consumer如何管理offset,如何保证数据不丢,如何保证数据不重复消费
5.tars如何进行服务发现,如何做负载均衡
6.tars线程模型
7.tars服务接口是被调用的流程,从TCP收到数据流开始到调用接口
-
kafka如何存储消息数据:partition相当于一个文件夹,里面分为大小相等的segment数据文件来存储一部分的message,一个segment主要包括一个index文件和一个log文件,index文件里是一个map,key是当前segment的offset的偏移量,value是log文件中对应消息的实际物理地址偏移量。log文件里也是一个map,key是当前partition的offset的偏移量,value是当前消息的实际物理地址偏移量。index文件采用的是稀疏索引,当索引文件没有命中,会二分查找到最近的消息,然后根据消息长度找到offset相等的那条消息。
-
kafka如何保证有序:
2.1 全局有序
(1)生产者有序:
i. 采用双端队列
ii. topic只设置一个partition分区
iii. 将 max.in.flight.requests.per.connection设置为1,生产者在服务器响应之前可以发送1条消息,保证消息按照发送顺序写入服务器
(2)消费者有序:
i. 使用单线程
ii. 采用保证消费顺序的线程模型
iii. 在消费端增加失败标记的记录,然后用定时任务轮询去重试失败的消息并做好监控报警。
2.2 局部有序
(1)生产者有序:
i. 采用双端队列
ii. 将需要保证有序的消息发送到同一个partition
(2)消费者有序:
i. 将需要保证有序的消息发送到同一个消费线程
-
kafka如何实现主从同步:使用ISR机制,ISR中的follower从leader拉取数据进行追加复制,ISR同步leader后有一个LEO,将ISR中最小的LEO作为HW高水位,consumer只能消费到HW的数据。ISR中的节点必须与zookeeper保持回话(心跳机制),不能落后 leader的写操作太多,否则被淘汰到OSR。
如何进行选主:动态的ISR集合中的所有follower都可以选举为leader。