只有两台机器,又要保证两边的数据库中的数据一致,且非要使用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下面进行一些处理。