Skip to content
This repository has been archived by the owner on Apr 1, 2024. It is now read-only.

ISSUE-19074: PIP-234: Support using shared thread pool across multiple Pulsar client instance #5318

Open
sijie opened this issue Dec 27, 2022 · 0 comments

Comments

@sijie
Copy link
Member

sijie commented Dec 27, 2022

Original Issue: apache#19074


Motivation

The Pulsar client mainly has three thread pools that cooperate with each other to complete the message publishing and consumption of messages.

  • IO threads - Used for handling network packets from the broker
  • Internal threads - Used for handling internal tasks such as moving the received messages to the internal receiver queue and pulling out the message from the receiver queue to return to users. And the Java client is optimized by the lock-free principle; each consumer will use a pinned internal thread to reduce the lock overhead.
  • External threads - Used by the message listener

All the above thread pools will be created automatically after a Pulsar client instance has been created.

But for some cases, users need to create multiple Pulsar client instances in a JVM process due to different authentications or others. Each client will have exclusive thread pools, which will cause unreasonable thread usage, waste memory, and potential performance degradation.

It is not a serious problem for previous releases with the default configurations because the thread pool will only have 1 thread by default. But it also doesn't make sense that we only have one thread for each thread pool. We have discussed this part under this thread

So this proposal will provide a new possibility for users that require multiple Pulsar client instances in one JVM process to use the shared thread pools across multiple Pulsar client instances.

Goal

Provide public API to use the shared thread pool across multiple Pulsar client instances in one JVM process

  • IO threads
  • Internal threads
  • External threads

BTW, we already have such an ability internally. It was just hidden for users. Please take a look at apache#12037 and apache#13839 to get more details.

API Changes

The following APIs will be introduced to the Java Client when creating a Client instance

PulsarClient.builder()
      .eventLoopGroup(ioEventLoopGroup)
      .internalExecutorProvider(sharedInternalExecutorProvider)
      .externalExecutorProvider(sharedExternalExecutorProvider)
      .scheduledExecutorProvider(sharedScheduledExecutorProvider)
@sijie sijie added the PIP label Dec 27, 2022
@sijie sijie added the Stale label Jan 27, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant