ApacheFlink:如何从Cassandra读取数据流/数据集?

ApacheFlink:如何从Cassandra读取数据流/数据集?,cassandra,apache-flink,Cassandra,Apache Flink,我试图利用以下链接中提供的信息,将卡桑德拉视为Flink中的数据源: 我在运行任务时遇到了AsyncWaitOperator异常。根据第一个链接,此异常是由于网络问题而发生的。然而,奇怪的是,我在本地VM上运行Cassandra,目标表中只有10行数据 @Jicaar在第一个链接中还提到,从RichAsyncFunction切换到RichMapFunction可以避免AsyncWaitOperator异常,有类似经验的人可以在RichMapFunction中分享如何操作吗 AsyncWa

我试图利用以下链接中提供的信息,将卡桑德拉视为Flink中的数据源:

我在运行任务时遇到了
AsyncWaitOperator
异常。根据第一个链接,此异常是由于网络问题而发生的。然而,奇怪的是,我在本地VM上运行Cassandra,目标表中只有10行数据

@Jicaar在第一个链接中还提到,从
RichAsyncFunction
切换到
RichMapFunction
可以避免
AsyncWaitOperator
异常,有类似经验的人可以在
RichMapFunction
中分享如何操作吗

AsyncWaitOperator
异常跟踪-->


下面的代码应该适用于从Cassandra读取Flink中的批处理

final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

ClusterBuilder clusterBuilder = new ClusterBuilder() {

        @Override
        public Cluster buildCluster(Cluster.Builder builder) {

            return builder.addContactPoint(<cassandraHost>))
                  .withPort(9042)
                  .withCredentials(<cassandraUserName>,<cassandraPassword>)
                  .build();
        } 
    };  

DataSet<Tuple3<String,String,String>> inputRecords = env
            .createInput    
            (new CassandraInputFormat<Tuple3<String,String,String>>(<select query>,clusterBuilder)          
            ,TupleTypeInfo.of(new TypeHint<Tuple3<String,String,String>>() {}));    
final ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment();
ClusterBuilder ClusterBuilder=新的ClusterBuilder(){
@凌驾
公共群集构建群集(Cluster.Builder){
返回builder.addContactPoint())
.带端口(9042)
.具有证书(,)
.build();
} 
};  
数据集inputRecords=env
.createInput
(新的CassandraInputFormat(,clusterBuilder)
,TupleTypeInfo.of(newTypeHint(){});

数据集的数据类型(示例中由三个字符串组成的Tuple3)将根据select查询返回的字段的类型和数量而有所不同

我同意这个答案@JamesYu,使用Cassandra作为源代码是您希望使用数据集功能实现的。卡桑德拉是一个表格,不像卡夫卡那样是一个可流化的来源。AsyncWaitOperator用于根据从流接收的数据查询数据表。因此,不能将其用作创建数据源的方法。
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

ClusterBuilder clusterBuilder = new ClusterBuilder() {

        @Override
        public Cluster buildCluster(Cluster.Builder builder) {

            return builder.addContactPoint(<cassandraHost>))
                  .withPort(9042)
                  .withCredentials(<cassandraUserName>,<cassandraPassword>)
                  .build();
        } 
    };  

DataSet<Tuple3<String,String,String>> inputRecords = env
            .createInput    
            (new CassandraInputFormat<Tuple3<String,String,String>>(<select query>,clusterBuilder)          
            ,TupleTypeInfo.of(new TypeHint<Tuple3<String,String,String>>() {}));