【问题标题】:Replacing Cassandra Cluster EC2 Instances with AWS Keyspace using Java legacy driver使用 Java 旧版驱动程序将 Cassandra 集群 EC2 实例替换为 AWS Keyspace
【发布时间】:2022-05-13 02:44:41
【问题描述】:

我们正在尝试用 AWS Keyspace 替换我们现有的 Cassandra EC2 集群,并且我们正在尝试保留我们的旧代码库。这个想法是简单地退出 devops 业务,让我们的 Cassandra 由 AWS 管理(扩展、升级等)。查看他们提供的指南

https://docs.aws.amazon.com/keyspaces/latest/devguide/using_java_driver.html

他们使用的驱动程序与我们目前使用的不同(更新):

我们目前的司机:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.3.0</version>
</dependency>

他们的例子:

<dependency>
    <groupId>com.datastax.oss</groupId>
    <artifactId>java-driver-core</artifactId>
    <version>4.4.0</version>
</dependency>

代码示例似乎与我们现有的代码完全不同。

问题 - 是否有人使用旧驱动程序和旧代码成功迁移到 AWS Keyspaces?或者这需要升级吗?我的犹豫是我们有很多代码,而且由于重构的成本,放弃 Cassandra 并重新开始使用其他东西(DynamoDB、MongoDB 等)可能更容易。

【问题讨论】:

  • 请记住,AWS Keyspaces 具有功能差异 - 它不是托管的 Cassandra,而是一种“用于 DynamoDB 的 Cassandra API”。检查第一个文档:docs.aws.amazon.com/keyspaces/latest/devguide/…。如果您需要托管 Cassandara,请查看 astra.datastax.com
  • 感谢您的信息。肯定想去主机服务,只是我们不必自己做devops,但是主机服务是否也需要升级驱动程序?我相信我们的 Cassandra 版本已经很老了。
  • 您可以使用驱动程序 3.x 连接到 Astra:docs.datastax.com/en/developer/java-driver/3.10/manual/cloud
  • 谢谢!我正在升级驱动程序和代码,虽然变化非常大。
  • 是的,驱动程序 4 的变化很大

标签: java cassandra amazon-keyspaces


【解决方案1】:

Amazon Keyspaces 可以非常简单地使用 3.x 驱动程序。虽然 4.x 驱动程序有一些好处,例如外部化配置,但无需升级即可移动 Amazon Keyspaces。

您可以使用传统的用户名密码验证或 sigv4 插件。

<!-- https://mvnrepository.com/artifact/software.aws.mcs/aws-sigv4-auth-cassandra-java-driver-plugin -->
<dependency>
    <groupId>software.aws.mcs</groupId>
    <artifactId>aws-sigv4-auth-cassandra-java-driver-plugin_3</artifactId>
    <version>3.0.3</version>
</dependency>

与 java 3.x 连接并写入键空间的代码示例。

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import software.aws.mcs.auth.SigV4AuthProvider;

import java.net.InetSocketAddress;
import java.util.Collections;
import java.util.List;


    public class OrderFetcher {
        public final static String TABLE_FORMAT = "%-25s%s\n";
        public final static int KEYSPACES_PORT = 9142;
    
        public static Cluster connectToCluster(String region, List<InetSocketAddress> contactPoints) {
            SigV4AuthProvider provider = new SigV4AuthProvider(region);
            return Cluster.builder()
                    .addContactPointsWithPorts(contactPoints)
                    .withPort(KEYSPACES_PORT)
                    .withAuthProvider(provider)
                    .withSSL()
                    .build();
        }
    
        public static void main(String[] args) {
            if (args.length != 3) {
                System.err.println("Usage: OrderFetcher <region> <endpoint> <customer ID>");
                System.exit(1);
            }
    
            String region = args[0];
            List<InetSocketAddress> contactPoints = Collections.singletonList(new InetSocketAddress(args[1], KEYSPACES_PORT));
    
            try (Cluster cluster = connectToCluster(region, contactPoints)) {
                Session session = cluster.connect();
    
                // Use a prepared query for quoting
                PreparedStatement prepared = session.prepare("select * from acme.orders where customer_id = ?");
    
                // We use execute to send a query to Cassandra. This returns a ResultSet, which is essentially a collection
                // of Row objects.
                ResultSet rs = session.execute(prepared.bind(args[2]));
    
                // Print the header
                System.out.printf(TABLE_FORMAT, "Date", "Order Id");
    
                for (Row row : rs) {
                    System.out.printf(TABLE_FORMAT, row.getTimestamp("order_timestamp"), row.getUUID("order_id"));
                }
            }
    
        }
    }

这里是github上的示例链接

https://github.com/aws-samples/amazon-keyspaces-examples/blob/main/java/datastax-v3/connection-sigv4/src/main/java/software/aws/mcs/example/OrderFetcher.java

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 2015-05-24
    • 2014-06-11
    • 1970-01-01
    • 2013-07-14
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多