我的Cassandra接收器配置如下:
ClusterBuilder secureCassandraSinkClusterBuilder = new ClusterBuilder() {
@Override
protected Cluster buildCluster(Cluster.Builder builder) {
return builder.addContactPoints(props.getCassandraClusterUrlAll().split(","))
.withPort(props.getCassandraPort())
.withAuthProvider(new DseGSSAPIAuthProvider("HTTP"))
.build();
};
CassandraSink
.addSink(cassandraObjectStream)
.setClusterBuilder(secureCassandraSinkClusterBuilder)
.build()
.name("Cassandra-Sink");
现在当没有正确配置与Cassandra的连接时,我得到一个 NoHostAvailableException ,或者当连接意外丢失时,我得到一个 ConnectionTimeOutException ,或者有时一个 WriteTimeoutException 。这最终会触发 JobExecutionException ,整个Flink作业终止。
我在哪里可以捕获这些Cassandra例外情况?这些被抛出的地方?我尝试在CassandraSink周围放置一个try-catch块但是没有做到。我希望捕获这些异常,并在连接超时的情况下重试连接到Cassandra,或者在写入超时的情况下重试写入Cassandra。
答案 0 :(得分:2)
AFAIK,您不能尝试使用BrowserModule
来捕获这些例外。
捕获像TimeoutException这样的异常的一种方法是为Cassandra实现自己的接收器,但这可能需要很长时间......
另一种方法是,如果您运行流式传输作业,则可以将任务重试设置为大于1到CassandraSink
,并启用检查点,以便流式传输作业可以根据最后一个检查点继续工作。 StreamingExecutionEnvironment.setRestartStrategy
支持WAL,因此可以在启用检查点的情况下实现CassandraSink
。