如何让更多的年轻人参与到中国传统舞蹈蹈活动中来呐 谈谈你的看法与建议

前几天去两家公司面试,面试嘚过程中, 两家公司的面试官都给我提了如标题这样的一个问题因为之前对kafka有一些了解,但是没有对这个的问题做过总结现场就凭着记憶的进行了回答,面试官也表示这个问题基本可以通过

回到家以后,重新回看了《kafka 权威指南》里的相关知识点回想了一下自己在现场嘚回答,最多只是60分及格但距离满分还相差甚远。

今天我们来分析一下这个问题

先来回忆一下kafka 中消息传输的整个过程

3、kafka server收到消息以后,保存数据并同步至副本

在上述的整个流程中,消息丢失的情况分为以几种可能性:

2、kafka server端 在收到消息以后保存消息时发生异常,异常分為三种

(1)可重试错误,通过重试来解决

3、consumer 在消费消息时发生异常导致consumer端消费失败

注:当然这里还可能发生另一种错误,就是在producer发送消息到kafka server端时消息体过大,producer client 直接抛出异常导致发送失败

我们先来了解一下,producer端发送消息的方式:

如果mit = false时则关闭了自动提交,你可以手动嘚通过应用程序代码进行提交这里我来梳理一下,consumer 消费消息的整个流程

  •  如果 kafka server中有消息 或是在阻塞等待的过程中有消息写入则立即返回給consumer端

我们来看一下,mit = false时如何手动提交的

 //这里的poll(100)指的是kafka server端没有消息时,连接等待的时间超过该时间立即返回空给consumer
 
 
 
 
针对这两种丢失的情况,我们做以下处理:

2、在consumer端消费消息操作完成以后 再提交 offset,类似于上文中的代码示例
 
以上的我们从producer 、 kafka server、 consumer 端出发通过相关的优化手段保证消息的不丢失,当然业界还有一些其它的办法比如在三种 send 的 调用方式中,callback时将消息写入到mysql 或日志中当consumer 消费消息成功以后,我们从mysql 或 日志Φ删除消息未成功消费的消息,可以启动一个线程将消息重新入队让consumer收到消息以后重新消费(rabbit mq中 可以 利用死信队列和备用交换机来完荿)
参考资料:《kafka 权威指南》第四章
}

我要回帖

更多关于 中国传统舞蹈 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信