ConsistencyLevel.LOCAL_QUORUM

时间:2019-02-02 20:07:18

标签: cassandra-3.0 apache-kafka-connect datastax-java-driver

在ConsistencyLevel.LOCAL_QUORUM上使用 CassandraSinkConnector 写入Cassandra时,我面临WriteTimeOutException。

我正在使用Cassandra 3.3.0版本

所以我需要如何处理和修复此异常的帮助?

堆栈跟踪:-

由于无法恢复的异常而导致的WorkerSinkTask.org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:546)org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:302)org .apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:205)org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:173)org.apache.kafka.connect.runtime.WorkerTask .doRun(WorkerTask.java:170)org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)java.util .concurrent.FutureTask.run(FutureTask.java:266)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)的java.lang .Thread.run(Thread.java:745) 由以下原因引起:org.apache.kafka.connect.errors.ConnectException:com.datastax.driver.core.exceptions.WriteTimeoutException:在以一致性LOCAL_QUORUM进行写查询期间,Cassandra超时(需要2个副本,但只有1个副本确认了写入)  cassandra.sink.CassandraSinkTask.put(CassandraSinkTask.java:65)\ n \ t org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:524)\ n \ t ... 10余\ n由... :com.datastax.driver.core.exceptions.WriteTimeoutException:在一致性LOCAL_QUORUM写入查询期间卡桑德拉超时(2复制品被要求,但只有1确认的写入)\ n \达

驱动程序配置: -

String user="test";
String password="test1234";

cluster = Cluster.builder()
                        .addContactPoints("some host address")
                        .withPort("1234")
                        .withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM))
                        .withCredentials(user, password)
                        .withSocketOptions(
                                new SocketOptions()
                                        .setConnectTimeoutMillis(15000)
                                        .setReadTimeoutMillis(0))
                        .build();
                session = cluster.connect();

1 个答案:

答案 0 :(得分:0)

仅当您在DataCenter中具有多个节点时,才会发生这种情况。当您尝试使用 LOCAL_QUORUM进行写入时,(Total / 2)+1 个节点应该可以写入数据。

假设在写入过程中,在3个节点中,有2个发生故障。在这种情况下,您将获得上述错误。

现在,一旦您看到节点,就有可能: 它们将显示为UP,但是由于节点随机发生故障的高负载,并且一旦该节点上的负载恢复正常,它们就会自动启动。

因此,应该在出现此错误的同时检查负载,内存使用率或CPU使用率。理想情况下,您可以使用Opsceter来监视这些事情。