IP Library Granted Patent US 12,693,866
Granted Patent B2
US 12,693,866 · App. 17/576,625 · Granted Jul 28, 2026

Activating a coprocessor to transform queued data associated with a topic

Inventors: Alexander Gallego (San Francisco, CA); Robert Blafford (Staten Island, NY)
Assignee: Redpanda Data, Inc.
G06F9/3877G06F9/546
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,693,866
App. No.
17/576,625
Granted
Jul 28, 2026
Kind
B2
Abstract

Disclosed herein are methods, apparatuses and systems for transforming data within a queuing system, including activating a first coprocessor for a first topic in the queuing system based on a first script identified for the first topic, obtaining a first initialization offset identifying a position in a queue of data elements associated with the first topic, storing a first coprocessor offset based on the first initialization offset, obtaining a last offset identifying a position of a last received data element in the queue of data elements associated with the topic, executing the first coprocessor against a first data element from a queue of data elements based on a comparison between the first coprocessor offset and the last offset to produce a first transformed data element, and storing the first transformed data element in a first materialized topic associated with the first topic.

Claims (31)

1 . A method for transforming data within a queuing system comprising:

activating a first coprocessor for a first topic in the queuing system based on a first script identified for the first topic, wherein the first topic is identified in the queuing system by a first name and the first script is associated with the first topic in a coprocessor lookup map;

obtaining a first initialization offset identifying a position in a queue of data elements associated with the first topic;

storing a first coprocessor offset based on the first initialization offset;

obtaining a last offset identifying a position of a last received data element in the queue of data elements associated with the first topic;

executing the first coprocessor against a first data element from the queue of data elements by comparing the first coprocessor offset and the last offset to produce a first transformed data element; and

storing the first transformed data element in a first materialized topic associated with the first topic, wherein the first materialized topic is identified in the queuing system by a second name different from the first name of the first topic, and wherein storage of the first data element persists at least until after the first transformed data element is stored.

2 . The method of claim 1 , further comprising:

activating a second coprocessor for the first topic in the queuing system based on a second script identified for the first topic;

obtaining a second initialization offset identifying a position in the queue of data elements associated with the first topic;

storing a second coprocessor offset based on the second initialization offset;

executing the second coprocessor against the first data element from the queue of data elements by comparing the second coprocessor offset and the last offset to produce a second transformed data element; and

storing the second transformed data element in a second materialized topic associated with the first topic.

3 . The method of claim 2 , wherein the first coprocessor and the second coprocessor have different latencies for processing data elements, and wherein the first coprocessor offset and the second coprocessor offset independently change based at least on the respective latencies for the first and second coprocessors.

4 . The method of claim 3 , wherein the first and second coprocessors execute asynchronously with respect to a receipt of data elements on which the first and second coprocessors are executed against and data elements are cached in memory pending execution of the first and second coprocessors.

5 . The method of claim 4 , wherein at least some data elements are not cached in memory if sufficient backpressure exists for the first coprocessor or the second coprocessor.

6 . The method of claim 5 , wherein a pacemaker processor provides data elements to the first coprocessor at a rate based on maintaining a desired backpressure of data elements waiting for the first coprocessor.

7 . The method of claim 2 , wherein the first and the second coprocessors are limited to an execution latency per data element less than an expected rate of receipt of data elements on which the first and second coprocessors are executed against.

8 . The method of claim 2 , wherein the first and the second coprocessors are limited to a maximum execution latency of 500 microseconds.

9 . The method of claim 1 , wherein executing the first coprocessor is performed by one or more coprocessor processes isolated from one or more queuing processes that perform at least one other step.

10 . The method of claim 9 , wherein the one or more coprocessor processes have a priority at least an order of magnitude less than the one or more queuing processes.

11 . The method of claim 1 , further comprising:

storing the first script in a compacted queue topic; and

monitoring for updates to the compacted queue topic, by a processing thread executed by a first core of a first computing device;

wherein the first script is identified for the first topic based on receipt of an update to the compacted queue topic based on the storing of the first script in the compacted queue topic.

12 . The method of claim 1 , wherein a processing thread that receives new data elements is restricted from writing to the first materialized topic.

13 . The method of claim 1 , wherein a processing thread that received and stored the data elements executes on a computing device.

14 . The method of claim 13 , wherein the processing thread operates on a first core of the computing device and utilizes a mathematically proven fault tolerant protocol,

wherein storing the first transformed data element in a first materialized topic does not utilize the mathematically proven fault tolerant protocol.

15 . The method of claim 1 , further comprising:

disabling the first coprocessor responsive to an error associated with the first coprocessor.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 14, 2022
From: GALLEGO, ALEXANDER; BLAFFORD, ROBERT
To: REDPANDA DATA, INC.
Reel/Frame 058663/0988 →
Continuity (2)
Provisional Application 63137416 · Jan 14, 2021
Related Publication 20220222080A1 · Jul 14, 2022
References Cited (34)
US 6889244B1 · Gaither · 2005 [cited by examiner]
US 9678812B2 · Arimilli · 2017 [cited by examiner]
US 10019364B2 · Shetty et al. · 2018 [cited by applicant]
US 10310897B2 · Drysdale · 2019 [cited by examiner]
US 10313219B1 · Burcham · 2019 [cited by examiner]
US 11074196B1 · Aleti et al. · 2021 [cited by applicant]
US 20030174708A1 · Van Asten · 2003 [cited by examiner]
US 20160274951A1 · Koizumi · 2016 [cited by examiner]
US 20180089312A1 · Pal et al. · 2018 [cited by applicant]
Data Structure Handbook—Queues, 2019, 8 pages, Retrieved from the Internet < URL: https://www.thedshandbook.com/queues/ >. [cited by examiner]
Johnson, “Distributed System Fault Tolerance Using Message Logging and Checkpointing”, Rice University, Dec. 1989, 141 pages. [cited by examiner]
Microsoft, “Blocking queues”, Apr. 12, 2006, pp. 1-9. [cited by examiner]
Palino et al., “Chapter 4. Kafka Consumers: Reading Data from Kafka”, Oct. 10, 2019, 39 pages. [cited by examiner]
Wikipedia, “Checksum”, Dec. 31, 2020, pp. 1-4. [cited by examiner]
Sebastian, How to write WASM filters for Envoy and deploy it with Istio, Apr. 19, 2020, https://banzaicloud.com/blog/envoy-wasm-filter/, 20 pages. [cited by applicant]
Github, WebAssembly High-Level Goals, Nov. 15, 2017, Retrieved on Jan. 13, 2022, https://github.com/WebAssembly/design/blob/main/HighLevelGoals.md, 2 pages. [cited by applicant]
Github, WebAssembly Design, Nov. 15, 2017, Retrieved on Jan. 13, 2022, https://github.com/WebAssembly/design/blob/main/README.md, 3 pages. [cited by applicant]
Ongaro, D., et al., “In Search of an Understandable Consensus Algorithm (Extended Version)”, Published May 20, 2014, <https://raft.github.io/raft.pdf> (18 pp). [cited by applicant]
Unknown, “The Raft Consensus Algorithm”, <https://raft.github.io/>, Downloaded Sep. 25, 2020 (11 pp). [cited by applicant]
Das, A., et al., “SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol”, <http://www.cs.cornell.edu/info/projects/spinglass/public_pdfs/SWIM.pdf> Downloaded Sep. 25, 2020 (10 pp). [cited by applicant]
Gallego, A., “Seastar: the future<> is here”, <https://www.alexgallego.org/concurrency/smf/2017/12/16/future.html> Dec. 16, 2017 (8 pp). [cited by applicant]
Sax, M.J., “Apache Kafka”, S. Sakr, A. Zomaya (eds.), Encyclopedia of Big Data Technologies, https://doi.org/10.1007/978-3-319-63962-8_196-1, <https://link.springer.com/content/pdf/10.1007%2F978-3-319-63962-8_196-1.pdf>… [cited by applicant]
Kreps, J., et al., “Kafka: a Distributed Messaging System for Log Processing”, NetDB'11, Jun. 12, 2011, Athens, Greece. <http://pages.cs.wisc.edu/~akella/CS744/F17/838-CloudPapers/Kafka.pdf> (7 pp). [cited by applicant]
Amazon Web Services, “Amazon S3 Features”, https://aws.amazon.com/s3/features/, Downloaded Sep. 25, 2020 (5 pp). [cited by applicant]
Amazon Web Services, “Amazon S3 Storage Classes”, <https://aws.amazon.com/s3/storage-classes/>, Downloaded Sep. 25, 2020 (6 pp). [cited by applicant]
Wikipedia, “Column-oriented DBMS”, <https://en.wikipedia.org/wiki/Column-oriented_DBMS> Downloaded Sep. 25, 2020 (7 pp). [cited by applicant]
Amazon Web Services, Amazon Simple Storage Service, “CopyObject”, <https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html> , Downloaded Sep. 25, 2020 (12 pp). [cited by applicant]
Apache Software Foundation, “Apache Parquet”, <https://parquet.apache.org/documentation/latest/> Downloaded Sep. 25, 2020 (7 pp). [cited by applicant]
Koshy, J., et al., “Kafka Mirroring (MirrorMaker)”, <https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27846330> Last Modified Jun. 23, 2017 (3 pp). [cited by applicant]
Loza, R., “Mirror Maker v2.0”, DZone, <https://dzone.com/articles/mirror-maker-v20>, Jun. 1, 2020 (13 pp). [cited by applicant]
Github, The Raft Consensus Algorithm, Retrieved on Aug. 13, 2020, https://raft.github.io/, 11 pages. [cited by applicant]
Seastar Documentation; https://web.archive.org/web/20201201095728/http://docs.seastar.io/master/index.html; Accessed Dec. 1, 2020; 1 page. [cited by applicant]
Fiber (compuer science); https://en.wikipedia.org/w/index.php?title=Fiber_(computer_science)&oldid=997247339; Last Modified Dec. 30, 2020; 3 pages. [cited by applicant]
Documentation; https://web.archive.org/web/20201123142756/https://v8.dev/docs; Accessed Nov. 23, 2020; 3 pages. [cited by applicant]