-
Notifications
You must be signed in to change notification settings - Fork 640
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] Integrate With OpenSchema #339
Comments
I am a user of eventmesh and I'm extremely interested in contributing to this project. I will go through the project related to EventMesh Schema Registry implementation which integrates with OpenSchema. |
OpenSchema spec preview is released here: https://github.com/openmessaging/openschema/blob/master/spec.md |
welcome and looking forward to your contributions. |
What is the question: I am attempting a design which integrates with OpenSchema and is also easy to extend. What would you like to be added:
Why is this needed:
|
@yzhao244 This store here better differ from event-store in connector, what do you think? |
@yzhao244 Would you like to share some new designs for us? thanks. |
Yes, you are right. :) ... maybe name it something like "eventmesh-database-api".. The purpose of this interface module is for introducing an abstraction layer of registry APIs |
What is the purpose of the design: The purpose of the design is for introducing Schema Registry as part of the EventMesh. What are the features to provide from Schema Registry:
What are the high level design to achieve the features
The followings are high-level design diagram: |
Hi @yzhao244 , I have some doubts about this design.
|
@xwm1992 Thanks for the questions. :) . The followings are replies.. Sorry about my drawings are a bit rough. :)
POST /subjects/(string: subject)/ GET /subjects PUT /config/(string: subject) DELETE /subjects/(string: subject)/versions/(version: version)
|
Furthermore, currently, the project does not have a layer which exposes API which follow the REST best practice. I would like to also propose another module something called "eventmesh-rest" which can expose EventMesh Schema Registry APIs by following the OpenSchema restful APIs standards as shown above. |
sure ok. |
Hi, I'm also interested in schema registry in EventMesh. Thanks for your design and explanations. Now I get that :
Also, I have some questions:
Am I understanding it in the right way? |
@yzhao244 Hi, I have a question, the h2 is a memory database, it seems doesn't support distributed, how can the different eventmesh-runtime sync the schema change? |
good question, maybe we need to make the schema work flow clear |
@ruanwenjun @qqeasonchen Hi guys, I am thinking it is better delivering OpenSchema Integration in an incremental delivery fashion in order to ensure a safe build. :) .. In total, OpenSchema APIs can be seen as three groups.. /subject/ related APIs, /schema/ related APIs, /config/compatibility related APIs which I would suggest to deliver each group by individually separated PRs. The PR 434 currently delivers /subject/ related APIs. |
Thanks for your participation. :) .. Yes, your understanding is correct. Schema Registry APIs are part of admin APIs so yes it can be run as part of EventMesh-runtime. The scope of schema is for ensuring the consistency and compatibility of exchanging events between event producer and event consumer. |
@yzhao244 sorry, after discuss with community, Schema Registry needs a separate server to run, eventmesh runtime query and cache schema, and then used to check schema, producer and consumer do not need to interact with schemaRegistry, what do you think of this? @JunjieChou also do the design now. |
@qqeasonchen @yzhao244 Hi, guys. Below is a high-level design of Schema Registry and EventMesh-Schema-SPI. It decouples Schema Registry as a separated runtime which currently is one host running schema registry. |
@JunjieChou @qqeasonchen @yzhao244 Hi Junjie, Thanks for your proposal on Schema Registry design. I agree overall design and the example steps of how eventmesh are using Schema Registry to process the events. I have two comments below:
Also, It is much lightweight to run Schema Registry Runtime as part of EventMesh runtime process. Deployment and service upgrade only deal with single runtime process. When scaling up the EventMesh runtime instances, Schema Registry Runtime will scale up along with it. it provides high availability. Since Schema APIs are stateless, we can scale up Schema Registry Runtime. Thus, from the perspectives of extensibility, deployment maintenance, and high availability, I would say running Schema Registry as part of EventMesh Runtime process.
|
@jinrongluo @yzhao244 @JunjieChou hi,Here is the different, schema registry runs dependently or along with Eventmesh runtime? disscusson is open here. I agree with setting up eventmesh-rest and eventmesh-store. |
@qqeasonchen @jinrongluo @yzhao244 agreementHi, Jinrong, I get what you mean. And I believe you are right considering scaling. The model you proposed is integrating Schema Registry API with EventMesh(eventmesh-rest), in which model there is no client and server because the eventmesh-rest undertakes the interaction with the database. And the database is independent of EventMesh so that other assets may also be stored. questionSo here comes another question, which database is suitable for this situation? h2-database is a memory database that is fast. Traditional Relational Database stores persistent data. a new concernBesides, I reconsider the steps which contain an unreasonable step(preparation). In step preparation, I assume that schema and serialization type is set first. However, serialization type may differ among events(with the same subject/topic) created by different producers which is actually the necessity that Schema Registry should exist. So I think schema and serialization type should be decided by producers rather than EventMesh. What do you think of this one? |
Anyway, the question is not an urgent one. But the concern may be a have-to-solved one before coding. What do you guys think? |
@JunjieChou @qqeasonchen @yzhao244 Thank you JunJie for your review and analysis. For database question. I would say the choice of database is depend on the deployment environment. For dev/test environment, where only single instance of EventMesh is provisioned, H2 database is sufficient. For Staging/Production environment, distributed database (such as MySQL) is required. So we can have eventmesh-store-plugin module which allows cloud vendors to have their own database plugin as the persistence layer for EventMesh. We can provide MySQL implementation as the reference in this opensource project. For schema and (de-)serialization, I would suggest this is done in the EventMesh SDK side. Producer and Consumer can use EventMesh SDK to (de-)serialize their event using their own schema type. I also love to hear other suggestions. :) |
@jinrongluo @qqeasonchen @yzhao244 hey, guys. After discussing with Weiming, I found that my understandings of some terms is not correct which makes my design a bit confusing. I get your points which is exactly what I thought and I will return with a new design picture. Sorry to make these confuses. |
Hi, @qqeasonchen @jinrongluo @yzhao244. |
@JunjieChou Nice |
* [ISSUE #339] add design doc for integrating OpenSchema * fix typos and change some representations * add eventmesh-schemaregistry pictures * Delete eventmesh-schemaregistry-arch.png * Delete eventmesh-schemaregistry-process.jpg * add eventmesh-schemaregistry pictures * change representations and process design
… and implement most APIs that doesn't need compatibility check. (#525) * [ISSUE #339] a skeleton of independent openschema registry service * add license for build.gradle add license for ```incubator-eventmesh/eventmesh-openschema/build.gradle``` * modify license modify license of ```incubator-eventmesh/eventmesh-openschema/build.gradle``` * update license update license of ```build.gradle``` in ```incubator-eventmesh/eventmesh-openschema/eventmesh-openschema-registry``` * Update application.yml update license of ```application.yml``` in ```incubator-eventmesh/eventmesh-openschema/eventmesh-openschema-registry``` * [ISSUE #339] add FLIP-like progress * [ISSUE #339] fix allowed-licenses.txt and remove unused dependencies * [ISSUE #339] remove null in allowed-licenses.txt and move dependency version in root-build.gradle
) * [ISSUE apache#339] add design doc for integrating OpenSchema * fix typos and change some representations * add eventmesh-schemaregistry pictures * Delete eventmesh-schemaregistry-arch.png * Delete eventmesh-schemaregistry-process.jpg * add eventmesh-schemaregistry pictures * change representations and process design
…ervice and implement most APIs that doesn't need compatibility check. (apache#525) * [ISSUE apache#339] a skeleton of independent openschema registry service * add license for build.gradle add license for ```incubator-eventmesh/eventmesh-openschema/build.gradle``` * modify license modify license of ```incubator-eventmesh/eventmesh-openschema/build.gradle``` * update license update license of ```build.gradle``` in ```incubator-eventmesh/eventmesh-openschema/eventmesh-openschema-registry``` * Update application.yml update license of ```application.yml``` in ```incubator-eventmesh/eventmesh-openschema/eventmesh-openschema-registry``` * [ISSUE apache#339] add FLIP-like progress * [ISSUE apache#339] fix allowed-licenses.txt and remove unused dependencies * [ISSUE apache#339] remove null in allowed-licenses.txt and move dependency version in root-build.gradle
Hi, I would like to continue on this issue and have created a pr in #821. |
I read the doc of SchemaRegistry, in short, it's a server which provide some interface to CRUD schema. This seems too weighty to me, our goal is simply to use the OpenSchema specification. As for the storage of Schema, it is better not to rely on additional web service, just store with our metadata is good enough. BTY, I don't recommend designing OpenSchema as a plugin, this is over design, at least, I don't think we will integrate with other schema specification. |
@ruanwenjun Ok, I see. I am gonna close the pr #821 and add a new module under |
* [ISSUE #339] add design doc for integrating OpenSchema * fix typos and change some representations * add eventmesh-schemaregistry pictures * Delete eventmesh-schemaregistry-arch.png * Delete eventmesh-schemaregistry-process.jpg * add eventmesh-schemaregistry pictures * change representations and process design
… and implement most APIs that doesn't need compatibility check. (#525) * [ISSUE #339] a skeleton of independent openschema registry service * add license for build.gradle add license for ```incubator-eventmesh/eventmesh-openschema/build.gradle``` * modify license modify license of ```incubator-eventmesh/eventmesh-openschema/build.gradle``` * update license update license of ```build.gradle``` in ```incubator-eventmesh/eventmesh-openschema/eventmesh-openschema-registry``` * Update application.yml update license of ```application.yml``` in ```incubator-eventmesh/eventmesh-openschema/eventmesh-openschema-registry``` * [ISSUE #339] add FLIP-like progress * [ISSUE #339] fix allowed-licenses.txt and remove unused dependencies * [ISSUE #339] remove null in allowed-licenses.txt and move dependency version in root-build.gradle
option 1. reference openmessage
openmessaging/openschema#1
https://github.com/openmessaging/openschema/blob/master/spec.md
The text was updated successfully, but these errors were encountered: