From 5eb579d9bf60c62feecd75bbed2c16caee04c637 Mon Sep 17 00:00:00 2001 From: yuezhang Date: Sun, 24 Apr 2022 22:00:16 +0800 Subject: [PATCH 1/6] RFC 51 --- rfc/README.md | 1 + rfc/rfc-51/DisruptorExecutor.png | Bin 0 -> 208870 bytes rfc/rfc-51/rfc-51.md | 80 +++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 rfc/rfc-51/DisruptorExecutor.png create mode 100644 rfc/rfc-51/rfc-51.md diff --git a/rfc/README.md b/rfc/README.md index e3f89714be24e..1dad7af959cf2 100644 --- a/rfc/README.md +++ b/rfc/README.md @@ -86,3 +86,4 @@ The list of all RFCs can be found here. | 48 | [LogCompaction for MOR tables](./rfc-48/rfc-48.md) | `UNDER REVIEW` | | 49 | [Support sync with DataHub](./rfc-49/rfc-49.md) | `ONGOING` | | 50 | [Improve Timeline Server](./rfc-50/rfc-50.md) | `UNDER REVIEW` | +| 50 | [Improve Hoodie Writing Data Efficiency Using Lock-Free Message Queue](./rfc-51/rfc-51.md) | `UNDER REVIEW` | diff --git a/rfc/rfc-51/DisruptorExecutor.png b/rfc/rfc-51/DisruptorExecutor.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf3323b8957effe84c19686238b63c6430dcc2f GIT binary patch literal 208870 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�Lc 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

%nkTKOOp0}YX;l@!_ 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 +# RFC-50: Improve Hoodie Writing Data Efficiency Using Lock-Free Message Queue + + +## Proposers +@zhangyue19921010 + +## Approvers + +## Status + +JIRA: https://issues.apache.org/jira/browse/HUDI-3963 + + +## Abstract + +Add Lock-Free executor to improve hoodie writing throughput and optimize execution efficiency. +Disruptor linked: https://lmax-exchange.github.io/disruptor/user-guide/index.html#_introduction + + +## Background + +Abstractly, hoodie consumes upstream data (Kafka or S3 files) into the lake is a standard production-consumption model. Currently, Hudi uses `LinkedBlockingQueue` as a message queue between Producer and Consumer. + +However, this lock model may become the bottleneck of application throughput when data volume is much larger. What's worse is that even if we increase the number of the executors, it is still difficult to improve the throughput. + +In other words, users may encounter throughput bottlenecks when writing data into hudi in some scenarios, and increasing the physical hardware scale and parameter tuning cannot solve this problem. + + +## Implementation + +![](DisruptorExecutor.png) + +1. Abstraction: first abstract the produce-consume process into three parts + - Producer interface: Fill the hoodie data into the inner message queue. + - Executor interface: Initialize, schedule and manage producers and consumers, and hold inner message queues. Executor controls the entire life cycle of data production and consumption. + - Consumer interface: Consumes data from inner message queue and write to hudi file. + +2. Following the abstract logic in party1, use the lock-free circular queue Disruptor as the inner message queue of the Executor + - Implement the producer abstraction in party1 and customize the `DisruptorBasedProducer` which will consume and set data to RingBuffer. + - Implement the abstraction of Executor. Also control the life cycle through Ringbuffer information and related APIs. Customize `HoodieDaemonThreadFactory` to control Thread behavior. + - Implement Consumer abstraction, define `DisruptorMessageHandler` to control consumption and clear data in Disruptor. + +3. New parameters + - `hoodie.write.executor.type`: Set executor which orchestrates concurrent producers and consumers communicating through a message queue. + Default value is `BOUNDED_IN_MEMORY_EXECUTOR` which use a bounded in-memory queue using `LinkedBlockingQueue`. + Also users could use `DISRUPTOR_EXECUTOR`, which use disruptor as a lock free message queue to gain better writing performance. + Although `DISRUPTOR_EXECUTOR` is still an experimental feature. + - `hoodie.write.buffer.size`: The size of the Disruptor Executor ring buffer, must be power of 2 + - `hoodie.write.wait.strategy`: Strategy employed for making DisruptorExecutor wait on a cursor. + +4. limitation + For now, this disruptor executor is only supported for spark insert and spark bulk insert operation. Other operations like spark upsert is still on going. + + +## Rollout/Adoption Plan + +Default executor is `BOUNDED_IN_MEMORY_EXECUTOR` which use a bounded in-memory queue using LinkedBlockingQueue same as now. +So there is no impact on existing users. + + +## Test Plan +1. Add UT `TestDisruptorMessageQueue` and `TestDisruptorExecutionInSpark` to guard above logic, also validate data correctness. +2. Add Benchmark `BoundInMemoryExecutorBenchmark` benchmark with BoundInMemoryExecutor(old) and DisruptorExecutior(new option) + From 2231df8d3672dfe2cb65a4334d98e7fe76e24003 Mon Sep 17 00:00:00 2001 From: yuezhang Date: Thu, 12 May 2022 14:19:01 +0800 Subject: [PATCH 2/6] TBD --- rfc/README.md | 2 +- rfc/{rfc-51 => rfc-53}/DisruptorExecutor.png | Bin rfc/{rfc-51/rfc-51.md => rfc-53/rfc-53.md} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename rfc/{rfc-51 => rfc-53}/DisruptorExecutor.png (100%) rename rfc/{rfc-51/rfc-51.md => rfc-53/rfc-53.md} (100%) diff --git a/rfc/README.md b/rfc/README.md index 1dad7af959cf2..40faa83c11e66 100644 --- a/rfc/README.md +++ b/rfc/README.md @@ -86,4 +86,4 @@ The list of all RFCs can be found here. | 48 | [LogCompaction for MOR tables](./rfc-48/rfc-48.md) | `UNDER REVIEW` | | 49 | [Support sync with DataHub](./rfc-49/rfc-49.md) | `ONGOING` | | 50 | [Improve Timeline Server](./rfc-50/rfc-50.md) | `UNDER REVIEW` | -| 50 | [Improve Hoodie Writing Data Efficiency Using Lock-Free Message Queue](./rfc-51/rfc-51.md) | `UNDER REVIEW` | +| 53 | [Improve Hoodie Writing Efficiency Using Lock-Free Message Queue](rfc-53/rfc-53.md) | `UNDER REVIEW` | diff --git a/rfc/rfc-51/DisruptorExecutor.png b/rfc/rfc-53/DisruptorExecutor.png similarity index 100% rename from rfc/rfc-51/DisruptorExecutor.png rename to rfc/rfc-53/DisruptorExecutor.png diff --git a/rfc/rfc-51/rfc-51.md b/rfc/rfc-53/rfc-53.md similarity index 100% rename from rfc/rfc-51/rfc-51.md rename to rfc/rfc-53/rfc-53.md From 31cd62c9a7cee6071f6ba325f7bf21e829423ad8 Mon Sep 17 00:00:00 2001 From: yuezhang Date: Thu, 12 May 2022 18:48:32 +0800 Subject: [PATCH 3/6] rfc details --- rfc/rfc-53/rfc-53.md | 82 ++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/rfc/rfc-53/rfc-53.md b/rfc/rfc-53/rfc-53.md index 4bcfecbd9bcf2..8c3a703b1cd22 100644 --- a/rfc/rfc-53/rfc-53.md +++ b/rfc/rfc-53/rfc-53.md @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -# RFC-50: Improve Hoodie Writing Data Efficiency Using Lock-Free Message Queue +# RFC-53: Use Lock-Free Message Queue Improving Hoodie Writing Efficiency ## Proposers @@ -29,40 +29,79 @@ JIRA: https://issues.apache.org/jira/browse/HUDI-3963 ## Abstract -Add Lock-Free executor to improve hoodie writing throughput and optimize execution efficiency. +New option which use Lock-Free Message Queue called Disruptor as inner message queue to improve hoodie writing performance and optimize writing efficiency. + Disruptor linked: https://lmax-exchange.github.io/disruptor/user-guide/index.html#_introduction ## Background -Abstractly, hoodie consumes upstream data (Kafka or S3 files) into the lake is a standard production-consumption model. Currently, Hudi uses `LinkedBlockingQueue` as a message queue between Producer and Consumer. +Based on master branch, hoodie consumes upstream data (Kafka or S3 files) into the lake is a standard production-consumption model. +Currently, hoodie uses `LinkedBlockingQueue` as a inner message queue between Producer and Consumer. -However, this lock model may become the bottleneck of application throughput when data volume is much larger. What's worse is that even if we increase the number of the executors, it is still difficult to improve the throughput. +However, this lock model may become the bottleneck of application throughput when data volume is much larger. +What's worse is that even if we increase the number of the executors, it is still difficult to improve the throughput. In other words, users may encounter throughput bottlenecks when writing data into hudi in some scenarios, and increasing the physical hardware scale and parameter tuning cannot solve this problem. +This RFC is to solve the performance bottleneck problem caused by locking in some large data volume scenarios -## Implementation +This RFC provides a new option which use Lock-Free Message Queue called Disruptor as inner message queue to +The advantages are that: + - Fully use all the cpu resources without lock blocking. + - Improving writing performance and efficiency + - Solve the potential performance bottlenecks causing by locking. -![](DisruptorExecutor.png) -1. Abstraction: first abstract the produce-consume process into three parts - - Producer interface: Fill the hoodie data into the inner message queue. - - Executor interface: Initialize, schedule and manage producers and consumers, and hold inner message queues. Executor controls the entire life cycle of data production and consumption. - - Consumer interface: Consumes data from inner message queue and write to hudi file. +## Implementation -2. Following the abstract logic in party1, use the lock-free circular queue Disruptor as the inner message queue of the Executor - - Implement the producer abstraction in party1 and customize the `DisruptorBasedProducer` which will consume and set data to RingBuffer. - - Implement the abstraction of Executor. Also control the life cycle through Ringbuffer information and related APIs. Customize `HoodieDaemonThreadFactory` to control Thread behavior. - - Implement Consumer abstraction, define `DisruptorMessageHandler` to control consumption and clear data in Disruptor. +![](DisruptorExecutor.png) -3. New parameters - - `hoodie.write.executor.type`: Set executor which orchestrates concurrent producers and consumers communicating through a message queue. - Default value is `BOUNDED_IN_MEMORY_EXECUTOR` which use a bounded in-memory queue using `LinkedBlockingQueue`. +This RFC mainly does two things: One is to do the code abstraction about hoodie consuming upstream data and writing into hudi format. +The other thing is to implement disruptor based producer, inner message queue executor and message handler based on this new abstraction. + +Firstly, briefly introduce code abstraction(take `[based-master]` as current logic/option, and `[rfc-new]` for new option provided by this rfc) +- [abstract] `HoodieMessageQueue`: Hold the inner message queue, control the initialization of the inner message queue, +control its life cycle, and provide a unified insert api, speed limit, memory control and other enrich functions. The current implementations are as follows: + - [based-master] `BoundedInMemoryQueue` which hold a `LinkedBlockingQueue` as inner message queue. + - [rfc-new] `DisruptorMessageQueue` which hold a lock free ringbuffer called disruptor as inner message queue. +- [interface] `HoodieProducer`: Controls the producer behaviors and life cycle of hoodie reading upstream data and writing it into the inner message queue. +The current implementations are as follows: + - [based-master][abstract] `BoundedInMemoryQueueProducer` Producer for `BoundedInMemoryQueue` + - [based-master] `IteratorBasedQueueProducer` Iterator based producer which pulls entry from iterator and produces items into the `LinkedBlockingQueue` + - [based-master] `FunctionBasedQueueProducer` Buffer producer which allows custom functions to insert entries to the `LinkedBlockingQueue` + - [rfc-new][abstract] `DisruptorBasedProducer`Producer for `DisruptorMessageQueue` + - [rfc-new] `IteratorBasedDisruptorProducer` Iterator based producer which pulls entry from iterator and produces items into the `DisruptorMessageQueue` + - [rfc-new] `FunctionBasedDisruptorQueueProducer` Buffer producer which allows custom functions to insert entries to the `DisruptorMessageQueue` + - [interface] `HoodieConsumer` Control hoodie to read the data from inner message queue and write them as hudi data files, and execute callback function. + The current implementations are as follows: + - [based-master] `BoundedInMemoryQueueConsumer` Consume entries directly from `LinkedBlockingQueue` and execute callback function. + - [rfc-new] `DisruptorMessageHandler` which hold the same `BoundedInMemoryQueueConsumer` instant mentioned before. Use `DisruptorMessageHandler` extracts each record in disruptor then + using `BoundedInMemoryQueueConsumer` writing hudi data file. +- [abstract] `HoodieExecutor`: Executor which orchestrates concurrent producers and consumers communicating through a inner message queue. +The current implementations are as follows: + - [based-master] `BoundedInMemoryExecutor` takes as input the size limit, queue producer(s), consumer and transformer and exposes API to orchestrate concurrent execution of these actors communicating through a central LinkedBlockingQueue. + - [rfc-new] `DisruptorExecutor` Control the initialization, life cycle of the disruptor, and coordinate the work of the producer, consumer, and ringbuffer related to the disruptor, etc. + +Secondly, This rfc implements disruptor related producers, message handlers and executor which use this lock-free message queue based on the above abstraction. Some compents are introduced in the first part. In this phase, we discuss how to use disruptor in hoodie writing stages. + +The Disruptor is a library that provides a concurrent ring buffer data structure. It is designed to provide a low-latency, high-throughput work queue in asynchronous event processing architectures. + +We use the Disruptor multi-producer single-consumer working model: +- Define `DisruptorPublisher` to register producers into Disruptor and control the produce behaviors including life cycle. +- Define `DisruptorMessageHandler` to register consumers into Disruptor and write consumption data from disruptor to hudi data file +- Define `HoodieDisruptorEvent` as the carrier of the hoodie message +- Define `HoodieDisruptorEventFactory`: Pre-populate all the hoodie events to fill the RingBuffer. +We can use `HoodieDisruptorEventFactory` to create `HoodieDisruptorEvent` storing the data for sharing during exchange or parallel coordination of an event. +- Expose some necessary parameters for the users with a proper default to tune in different scenarios. + +Finally, let me introduce the new parameters: + - `hoodie.write.executor.type`: Choose the type of executor to use, which orchestrates concurrent producers and consumers communicating through a inner message queue. + Default value is `BOUNDED_IN_MEMORY_EXECUTOR` which used a bounded in-memory queue `LinkedBlockingQueue`. Also users could use `DISRUPTOR_EXECUTOR`, which use disruptor as a lock free message queue to gain better writing performance. Although `DISRUPTOR_EXECUTOR` is still an experimental feature. - - `hoodie.write.buffer.size`: The size of the Disruptor Executor ring buffer, must be power of 2 - - `hoodie.write.wait.strategy`: Strategy employed for making DisruptorExecutor wait on a cursor. + - `hoodie.write.buffer.size`: The size of the Disruptor Executor ring buffer, must be power of 2. + - `hoodie.write.wait.strategy`: Strategy employed for making DisruptorExecutor wait for a cursor. 4. limitation For now, this disruptor executor is only supported for spark insert and spark bulk insert operation. Other operations like spark upsert is still on going. @@ -70,11 +109,12 @@ In other words, users may encounter throughput bottlenecks when writing data int ## Rollout/Adoption Plan -Default executor is `BOUNDED_IN_MEMORY_EXECUTOR` which use a bounded in-memory queue using LinkedBlockingQueue same as now. +Default executor is `BOUNDED_IN_MEMORY_EXECUTOR` which use a bounded in-memory queue using `LinkedBlockingQueue` same as master. + So there is no impact on existing users. ## Test Plan 1. Add UT `TestDisruptorMessageQueue` and `TestDisruptorExecutionInSpark` to guard above logic, also validate data correctness. -2. Add Benchmark `BoundInMemoryExecutorBenchmark` benchmark with BoundInMemoryExecutor(old) and DisruptorExecutior(new option) +2. Add Benchmark `BoundInMemoryExecutorBenchmark` benchmark with BoundInMemoryExecutor(based-master) and DisruptorExecutior(new option) From 80a2f2e07c5a31c5c2553aaa97511949712bc6be Mon Sep 17 00:00:00 2001 From: yuezhang Date: Thu, 12 May 2022 18:49:47 +0800 Subject: [PATCH 4/6] rfc details --- rfc/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rfc/README.md b/rfc/README.md index 40faa83c11e66..f0ee088531967 100644 --- a/rfc/README.md +++ b/rfc/README.md @@ -85,5 +85,4 @@ The list of all RFCs can be found here. | 47 | [Add Call Produce Command for Spark SQL](./rfc-47/rfc-47.md) | `UNDER REVIEW` | | 48 | [LogCompaction for MOR tables](./rfc-48/rfc-48.md) | `UNDER REVIEW` | | 49 | [Support sync with DataHub](./rfc-49/rfc-49.md) | `ONGOING` | -| 50 | [Improve Timeline Server](./rfc-50/rfc-50.md) | `UNDER REVIEW` | -| 53 | [Improve Hoodie Writing Efficiency Using Lock-Free Message Queue](rfc-53/rfc-53.md) | `UNDER REVIEW` | +| 50 | [Improve Timeline Server](./rfc-50/rfc-50.md) | `UNDER REVIEW` | \ No newline at end of file From 765c7c9d031deb7bdebead97032a61b4b9e5ad4a Mon Sep 17 00:00:00 2001 From: yuezhang Date: Tue, 17 May 2022 09:30:00 +0800 Subject: [PATCH 5/6] design review --- rfc/rfc-53/rfc-53.md | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/rfc/rfc-53/rfc-53.md b/rfc/rfc-53/rfc-53.md index 8c3a703b1cd22..88372f38d7511 100644 --- a/rfc/rfc-53/rfc-53.md +++ b/rfc/rfc-53/rfc-53.md @@ -42,7 +42,8 @@ Currently, hoodie uses `LinkedBlockingQueue` as a inner message queue between Pr However, this lock model may become the bottleneck of application throughput when data volume is much larger. What's worse is that even if we increase the number of the executors, it is still difficult to improve the throughput. -In other words, users may encounter throughput bottlenecks when writing data into hudi in some scenarios, and increasing the physical hardware scale and parameter tuning cannot solve this problem. +In other words, users may encounter throughput bottlenecks when writing data into hudi in some scenarios, +for example the schema is relatively simple, but the volume of data is pretty large or users observed insufficient data throughput and low cpu usage, etc. This RFC is to solve the performance bottleneck problem caused by locking in some large data volume scenarios @@ -89,7 +90,8 @@ The Disruptor is a library that provides a concurrent ring buffer data structure We use the Disruptor multi-producer single-consumer working model: - Define `DisruptorPublisher` to register producers into Disruptor and control the produce behaviors including life cycle. -- Define `DisruptorMessageHandler` to register consumers into Disruptor and write consumption data from disruptor to hudi data file +- Define `DisruptorMessageHandler` to register consumers into Disruptor and write consumption data from disruptor to hudi data file. +For example we will clear clear out the event after processing it to avoid to avoid unnecessary memory and GC pressure - Define `HoodieDisruptorEvent` as the carrier of the hoodie message - Define `HoodieDisruptorEventFactory`: Pre-populate all the hoodie events to fill the RingBuffer. We can use `HoodieDisruptorEventFactory` to create `HoodieDisruptorEvent` storing the data for sharing during exchange or parallel coordination of an event. @@ -100,11 +102,43 @@ Finally, let me introduce the new parameters: Default value is `BOUNDED_IN_MEMORY_EXECUTOR` which used a bounded in-memory queue `LinkedBlockingQueue`. Also users could use `DISRUPTOR_EXECUTOR`, which use disruptor as a lock free message queue to gain better writing performance. Although `DISRUPTOR_EXECUTOR` is still an experimental feature. - - `hoodie.write.buffer.size`: The size of the Disruptor Executor ring buffer, must be power of 2. - - `hoodie.write.wait.strategy`: Strategy employed for making DisruptorExecutor wait for a cursor. + - `hoodie.write.buffer.size`: The size of the Disruptor Executor ring buffer, must be power of 2. Also the default/recommended value is 1024. + - `hoodie.write.wait.strategy`: Used for disruptor wait strategy. The Wait Strategy determines how a consumer will wait for events to be placed into the Disruptor by a producer. + More details are available in followed table about being optionally lock-free. + + Alternative Wait Strategies + + The default WaitStrategy used by the Disruptor is the `BlockingWaitStrategy`. Internally the `BlockingWaitStrategy` uses a typical lock and condition variable to handle thread wake-up. + The BlockingWaitStrategy is the slowest of the available wait strategies, but is the most conservative with the respect to CPU usage and will give the most consistent behaviour across the widest variety of deployment options. + + Knowledge of the deployed system can allow for additional performance by choosing a more appropriate wait strategy: + + `SleepingWaitStrategy`: + + Like the `BlockingWaitStrategy` the `SleepingWaitStrategy` it attempts to be conservative with CPU usage by using a simple busy wait loop. + The difference is that the `SleepingWaitStrategy` uses a call to `LockSupport.parkNanos(1)` in the middle of the loop. On a typical Linux system this will pause the thread for around 60µs. + + This has the benefits that the producing thread does not need to take any action other increment the appropriate counter and that it does not require the cost of signalling a condition variable. + However, the mean latency of moving the event between the producer and consumer threads will be higher. + + It works best in situations where low latency is not required, but a low impact on the producing thread is desired. A common use case is for asynchronous logging. + + `YieldingWaitStrategy` + + The `YieldingWaitStrategy` is one of two WaitStrategies that can be use in low-latency systems. It is designed for cases where there is the option to burn CPU cycles with the goal of improving latency. + + The `YieldingWaitStrategy` will busy spin, waiting for the sequence to increment to the appropriate value. Inside the body of the loop `Thread#yield()` will be called allowing other queued threads to run. + + This is the recommended wait strategy when you need very high performance, and the number of `EventHandler` threads is lower than the total number of logical cores, e.g. you have hyper-threading enabled. + + `BusySpinWaitStrategy` + + The `BusySpinWaitStrategy` is the highest performing WaitStrategy. Like the `YieldingWaitStrategy`, it can be used in low-latency systems, but puts the highest constraints on the deployment environment. + + This wait strategy should only be used if the number of `EventHandler` threads is lower than the number of physical cores on the box, e.g. hyper-threading should be disabled. 4. limitation - For now, this disruptor executor is only supported for spark insert and spark bulk insert operation. Other operations like spark upsert is still on going. + For now, this disruptor executor is only supported for spark insert and spark bulk insert operation. Other operations like spark upsert, flink related is still on going. ## Rollout/Adoption Plan From 6edd9582998823a2c3dfd181c55f2f380c248e87 Mon Sep 17 00:00:00 2001 From: yuezhang Date: Mon, 23 May 2022 11:26:38 +0800 Subject: [PATCH 6/6] address comments --- rfc/rfc-53/rfc-53.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/rfc/rfc-53/rfc-53.md b/rfc/rfc-53/rfc-53.md index 88372f38d7511..b59768ab9e3c0 100644 --- a/rfc/rfc-53/rfc-53.md +++ b/rfc/rfc-53/rfc-53.md @@ -21,6 +21,7 @@ @zhangyue19921010 ## Approvers +@leesf ## Status @@ -137,9 +138,6 @@ Finally, let me introduce the new parameters: This wait strategy should only be used if the number of `EventHandler` threads is lower than the number of physical cores on the box, e.g. hyper-threading should be disabled. -4. limitation - For now, this disruptor executor is only supported for spark insert and spark bulk insert operation. Other operations like spark upsert, flink related is still on going. - ## Rollout/Adoption Plan @@ -152,3 +150,11 @@ So there is no impact on existing users. 1. Add UT `TestDisruptorMessageQueue` and `TestDisruptorExecutionInSpark` to guard above logic, also validate data correctness. 2. Add Benchmark `BoundInMemoryExecutorBenchmark` benchmark with BoundInMemoryExecutor(based-master) and DisruptorExecutior(new option) +## Future Plan + For now, this DisruptorExecutor is supported for spark insert and spark bulk insert operations as an experimental feature. So that there're also several further steps need to be done: + 1. Support DisruptorExecutor for spark upsert operation as multi-producers and single consumer. + 2. Support DisruptorExecutor for Flink writing operation. + 3. For some cases like bulk_insert and flink ingestion, we may support `DirectExecutor` which use no inner message queue and read messages from iterator directly + ,writing into hudi(remove the producer/consumer at all). + +