Kafka有关poll方法的疑问

Iyxh 发表于: 2019-08-14   最后更新时间: 2019-08-14 18:40:24   3,735 游览

背景

只有两台机器,又要保证两边的数据库中的数据一致,且非要使用kafka的情况下。

场景

两台机器中的kafka,有一个当做是主,一个当做是备,消费者只消费主kafka中的数据。

问题

当主kafka服务挂掉之后,此时执行poll方法会阻塞,但是try catch不到异常,只会打印一些DEBUG级别的日志。日志内容包含连接异常,但是不会抛出异常。

目的

当kafka挂掉之后,调用poll能够抛出异常,然后我就可以通过异常捕捉处理,切换备kafka为主kafka消费。但是kafka挂掉之后,poll方法会阻塞,且不会抛异常,请教一下有什么办法可以让poll连接不到kafka后抛异常吗?

后续,感觉已经有了一种解决方案,但是因为不能删除提问,所以写一下我的想法

我查看了下源码,发现了一些东西,所有有一种解决方案来适应上面的需求了。预设一个值,就是poll之后判断records为空的次数,当大于预设值后,判断kafka服务的状态(有办法实现),然后重新定义相对应的消费者,以此实现消费者主备的切换。

poll有两个方法,如下

poll(final Long timeout) => poll(timeout, false);
poll(final Duration timeout) => poll(timeout, true);

发现使用第二种参数的poll方法的时候,即使kafka服务挂掉了,也不会阻塞在poll内(第一种则会阻塞),所以可以在poll下面进行一些处理。

发表于 2019-08-14
添加评论

kafka的耐用性是跟副本的数量有关,默认情况下节点挂一台,另一台会成为leader的呀。
你这个主备指的是什么呢?

你的答案

查看kafka相关的其他问题或提一个您自己的问题