使用 Flink 向 Cassandra 写入记录的不同方式的区别

Difference between different ways of writing records to Cassandra using Flink

我浏览了很多关于 SO 的帖子和 Flink 的官方文档,但我找不到我要找的东西。我正在寻找 RichSinkFunctionRichAsyncFunctionAsyncIOCassandraSink 之间的区别,以便使用 [=17= 在 Cassandra DB 中写入记录 faster/multithreaded ].

我的理解如下:

  1. RichSinkFunction - 如果实施得当,它将为您完成工作。因为它打开和关闭一次连接。
  2. RichAsyncFunction- 实现与 RichSinkFunction 相同。它最初以 Sync 模式工作。我可以将 executorService 用于多线程目的。另外,我看到如果考虑周到地传递容量,它可以给你更高的吞吐量。
  3. AsyncIO - 默认情况下不支持多线程。此外,根据其中一个 SO 答案,我们可以使用与 RichAsyncFunction 相同的 executorService 来创建文档中未提及的单独线程。
  4. CassandraSink - 由 Flink 提供,具有各种属性。使用 setMaxConcurrentReqeuests 会给我更快的结果吗?

为了我通过 Flink 程序寻找的目的,在提到的 类 中,什么是最好的?

我认为你可以使用 CassandraSink,它使用 DataStax 的 java-driver(https://github.com/datastax/java-driver) 来访问 Cassandra。 Flink 使用 executeAsync 函数来获得更好的速度。如您所述,setMaxConcurrentRequests 设置可以从同一会话发送的最大请求数。

RichSinkFunction 是 Fl​​ink 中的一个基本函数。我们可以用 RichSinkFunction 实现我们自己的 Cassandra Sink,但它需要像初始化客户端、创建线程等工作

RichAsyncFunction主要针对AsyncIO运算符。我们仍然需要初始化 Cassandra 客户端。除此之外,我们只需要专注于实现asyncInvoke功能和故障处理。

CassandraSink 使用 Cassandra 客户端的异步 API 实现 RichSinkFunction。这是代码最少的最简单的异步 API。