)]}'
{
  "commit": "90c6abc05f89b1804913297786cfad73481888d5",
  "tree": "729286fca3b151a18fe1056d38b4b558ac34efa2",
  "parents": [
    "c3cf0b2e878b37096de2ee6de3c7099874ccf82a"
  ],
  "author": {
    "name": "StevenLuMT",
    "email": "lushiji@apache.org",
    "time": "Wed May 13 19:04:15 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed May 13 19:04:15 2026 +0800"
  },
  "message": "[feat][client] PCIP-5 Support Pull Consumer (#24)\n\n\n### Motivation\nOur organization is currently planning a migration from RocketMQ to Pulsar. To facilitate this transition, we aim to implement a standardized abstraction layer for MQ clients that encapsulates implementation details of specific messaging systems. This abstraction layer will allow seamless engine replacement while maintaining consistent client interfaces. However, two critical compatibility issues hinder the unification of message fetching patterns between RocketMQ/Kafka and Pulsar:\n\n**1. Interface Disparity:**\n\n- Pulsar currently lacks native support for offset-based message fetching (fetch/pull paradigm) that allows specifying exact message positions and batch sizes.\n\n**2. Positioning Mechanism Mismatch:**\n\n- RocketMQ/Kafka: Utilize monotonically increasing numerical offsets for message positioning and acknowledgment\n- Pulsar: Relies on composite MessageID (ledgerId + entryId + batchIndex) for message identification.\n\nTherefore, I propose to contribute a customized feature implementation to the Pulsar contributor repository that leverages existing Pulsar APIs to achieve functionality similar to RocketMQ\u0027s pull consumer. This implementation could serve companies like ours with standardized client requirements, allowing them to reuse this solution.\n\n\n### Modifications\n1. Upgrade Pulsar version to 4.0.8(features include PIP-415 a new API to get the message id by offset) #23 \n2. Implement RocketMQ-like pull consumer functionality using existing Pulsar APIs.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "33d4be375940f4aed1436069bb13ff605ed038df",
      "new_mode": 33188,
      "new_path": "pcip/pcip-5.md"
    },
    {
      "type": "modify",
      "old_id": "e65edca71cb790c48d381586050a4ef9cb464527",
      "old_mode": 33188,
      "old_path": "pom.xml",
      "new_id": "75733765ed6db2ef5aa7cfb3e475dbf81b350702",
      "new_mode": 33188,
      "new_path": "pom.xml"
    },
    {
      "type": "modify",
      "old_id": "db36c7dfe58e1d66b0f83424ef13c11c79db525a",
      "old_mode": 33188,
      "old_path": "pulsar-client-common-contrib/pom.xml",
      "new_id": "1e7cf3a418c6f38f9cc9ef142ada46daf0eb01c3",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/pom.xml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ea639391120e62a62bd7114195bad50433bf1d14",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/api/PulsarPullConsumer.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "74bba7bff19a9dcb6f44a4d415b2945069b11510",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/api/impl/PulsarPullConsumerImpl.java"
    },
    {
      "type": "copy",
      "old_id": "7b2a7c49c4f3c1cf4263a3579c520c0fc2a98b76",
      "old_mode": 33188,
      "old_path": "pulsar-client-common-contrib/src/test/java/DemoTest.java",
      "new_id": "a40fc056e436ad1fedba7d42e3149499e4522739",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/common/Constants.java",
      "score": 64
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "58b19b8ec956a0b21f741da586648d10fd0bb557",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/common/ConsumeStats.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "02179a6d9f816cf2b06dfa2595088f8b9c7c3c2d",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/common/PullRequest.java"
    },
    {
      "type": "copy",
      "old_id": "7b2a7c49c4f3c1cf4263a3579c520c0fc2a98b76",
      "old_mode": 33188,
      "old_path": "pulsar-client-common-contrib/src/test/java/DemoTest.java",
      "new_id": "63cdd91c4cecca15204f0d3e4373254802821baf",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/common/PullResponse.java",
      "score": 61
    },
    {
      "type": "copy",
      "old_id": "7b2a7c49c4f3c1cf4263a3579c520c0fc2a98b76",
      "old_mode": 33188,
      "old_path": "pulsar-client-common-contrib/src/test/java/DemoTest.java",
      "new_id": "4873d10a68da1583cbf49c3afaea5e48ed92f2dd",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/common/package-info.java",
      "score": 74
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f1ecc0017f090b6f1bc1bd4e68c7e01cf6dab6f0",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/util/OffsetToMessageIdCache.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dc2e7402d26f44f94a3fbf5d86eb6b96d260196b",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/util/OffsetToMessageIdCacheProvider.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7f517d9eaf2ef57090282db73bdf2c82dc4c19b4",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/util/PulsarAdminUtils.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6c2ff4bfa5ad03d33b23ffe7783770606c1b7667",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/util/ReaderCache.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c8281ec67e3c4373ad3eef97083210afd7b5a966",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/util/ReaderCacheProvider.java"
    },
    {
      "type": "rename",
      "old_id": "7b2a7c49c4f3c1cf4263a3579c520c0fc2a98b76",
      "old_mode": 33188,
      "old_path": "pulsar-client-common-contrib/src/test/java/DemoTest.java",
      "new_id": "e53ef1967b8d15f4a61c63bb7d5ad2416e8d484f",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/java/org/apache/pulsar/client/util/package-info.java",
      "score": 74
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2bd2e7903ff18a7a6d324c7ebdcafd3a6841709e",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/main/resources/pulsar-container.properties"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dc490266e54173bca582651dc055d04d6a833cff",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/test/java/PulsarPullConsumerTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "96976affbe79112ba6f857e2603c4965ddb59ced",
      "new_mode": 33188,
      "new_path": "pulsar-client-common-contrib/src/test/java/SingletonPulsarContainer.java"
    }
  ]
}
