Giter Site home page Giter Site logo

apache / incubator-eventmesh Goto Github PK

View Code? Open in Web Editor NEW
1.6K 64.0 616.0 64.65 MB

EventMesh is a new generation serverless event middleware for building distributed event-driven applications.

Home Page: https://eventmesh.apache.org/

License: Apache License 2.0

Java 77.08% Shell 0.98% Dockerfile 0.03% Go 4.58% Makefile 0.32% Rust 1.64% ANTLR 2.26% C 12.04% HTML 1.07%
esb event-driven event-mesh event-governance cloud-native serverless message-bus event-gateway event-streaming event-sourcing serverless-workflow cqrs multi-runtime pubsub microservice hacktoberfest event-connector

incubator-eventmesh's Introduction

Apache EventMesh

Apache EventMesh is a new generation serverless event middleware for building distributed event-driven applications.

EventMesh Architecture

EventMesh Architecture

EventMesh Dashboard

EventMesh Dashboard

Features

Apache EventMesh has a vast amount of features to help users achieve their goals. Let us share with you some of the key features EventMesh has to offer:

  • Built around the CloudEvents specification.
  • Rapidty extendsible interconnector layer connectors using openConnect such as the source or sink of Saas, CloudService, and Database etc.
  • Rapidty extendsible storage layer such as Apache RocketMQ, Apache Kafka, Apache Pulsar, RabbitMQ, Redis.
  • Rapidty extendsible meta such as Consul, Nacos, ETCD and Zookeeper.
  • Guaranteed at-least-once delivery.
  • Deliver events between multiple EventMesh deployments.
  • Event schema management by catalog service.
  • Powerful event orchestration by Serverless workflow engine.
  • Powerful event filtering and transformation.
  • Rapid, seamless scalability.
  • Easy Function develop and framework integration.

Roadmap

Please go to the roadmap to get the release history and new features of Apache EventMesh.

Subprojects

Quick start

This section of the guide will show you the steps to deploy EventMesh from Local, Docker, K8s.

This section guides the launch of EventMesh according to the default configuration, if you need more detailed EventMesh deployment steps, please visit the EventMesh official document.

Deployment Event Store

EventMesh supports multiple Event Stores, the default storage mode is standalone, and does not rely on other event stores as layers.

Run EventMesh Runtime locally

1. Download EventMesh

Download the latest version of the Binary Distribution from the EventMesh Download page and extract it:

wget https://dlcdn.apache.org/eventmesh/1.10.0/apache-eventmesh-1.10.0-bin.tar.gz
tar -xvzf apache-eventmesh-1.10.0-bin.tar.gz
cd apache-eventmesh-1.10.0

2. Run EventMesh

Execute the start.sh script to start the EventMesh Runtime server.

bash bin/start.sh

View the output log:

tail -n 50 -f logs/eventmesh.out

When the log output shows server state:RUNNING, it means EventMesh Runtime has started successfully.

You can stop the run with the following command:

bash bin/stop.sh

When the script prints shutdown server ok!, it means EventMesh Runtime has stopped.

Run EventMesh Runtime in Docker

1. Pull EventMesh Image

Use the following command line to download the latest version of EventMesh:

sudo docker pull apache/eventmesh:latest

2. Run and Manage EventMesh Container

Use the following command to start the EventMesh container:

sudo docker run -d --name eventmesh -p 10000:10000 -p 10105:10105 -p 10205:10205 -p 10106:10106 -t apache/eventmesh:latest

Enter the container:

sudo docker exec -it eventmesh /bin/bash

view the log:

cd logs
tail -n 50 -f eventmesh.out

Run EventMesh Runtime in Kubernetes

1. Deploy operator

Run the following commands(To delete a deployment, simply replace deploy with undeploy):

$ cd eventmesh-operator && make deploy

Run kubectl get podskubectl get crd | grep eventmesh-operator.eventmeshto see the status of the deployed eventmesh-operator.

$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
eventmesh-operator-59c59f4f7b-nmmlm   1/1     Running   0          20s

$ kubectl get crd | grep eventmesh-operator.eventmesh
connectors.eventmesh-operator.eventmesh   2024-01-10T02:40:27Z
runtimes.eventmesh-operator.eventmesh     2024-01-10T02:40:27Z

2. Deploy EventMesh Runtime

Execute the following command to deploy runtime, connector-rocketmq (To delete, simply replace create with delete):

$ make create

Run kubectl get pods to see if the deployment was successful.

NAME                                  READY   STATUS    RESTARTS   AGE
connector-rocketmq-0                  1/1     Running   0          9s
eventmesh-operator-59c59f4f7b-nmmlm   1/1     Running   0          3m12s
eventmesh-runtime-0-a-0               1/1     Running   0          15s

Contributing

Each contributor has played an important role in promoting the robust development of Apache EventMesh. We sincerely appreciate all contributors who have contributed code and documents.

Here is the List of Contributors, thank you all! :)

CNCF Landscape

Apache EventMesh enriches the CNCF Cloud Native Landscape.

License

Apache EventMesh is licensed under the Apache License, Version 2.0.

Community

WeChat Assistant WeChat Public Account Slack
Join Slack Chat(Please open an issue if this link is expired)

Bi-weekly meeting : #Tencent meeting : 346-6926-0133

Bi-weekly meeting record : bilibili

Mailing List

Name Description Subscribe Unsubscribe Archive
Users User discussion Subscribe Unsubscribe Mail Archives
Development Development discussion (Design Documents, Issues, etc.) Subscribe Unsubscribe Mail Archives
Commits Commits to related repositories Subscribe Unsubscribe Mail Archives
Issues Issues or PRs comments and reviews Subscribe Unsubscribe Mail Archives

incubator-eventmesh's People

Contributors

alonexc avatar fabian4 avatar harshithasudhakar avatar hattorihenzo avatar horoc avatar inanos avatar jellybo avatar jinrongluo avatar jonyangx avatar keranbingaa avatar liu-wei-git avatar lrhkobe avatar majorhe1 avatar markliniubility avatar mroccyen avatar mxsm avatar mytang0 avatar pandaapo avatar pil0txia avatar piyush280599 avatar qqeasonchen avatar ruanwenjun avatar walleliu1016 avatar walterlife avatar weihubeats avatar wqliang avatar xiaoyang-sde avatar xwm1992 avatar yanrongzhen avatar yuyuyu333333 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

incubator-eventmesh's Issues

some toString methods are single formated in eventmesh-common component

some toString() method not formated, this will lead print in a single without any seperator, inconvenient to view the log when analysis the problem.
such as:

HeartBeatInfo toString() method content is in the same line without any seperator
@Override public String toString() { return "HeartBeatInfo{" + "serviceId=" + serviceId + "instanceId=" + instanceId + "topicList=" + topicList + '}'; }
print result:
HeartBeatInfo{serviceId=serviceIdinstanceId=110topicList=[topic1, topic2]}

follow toString output maybe better
HeartBeatInfo{serviceId='serviceId', instanceId='110', topicList=[topic1, topic2]}

AccessMessage toString() method absence the body
public String toString() { return "AccessMessage{" + "topic='" + topic + '\'' + ", properties=" + properties + '}'; }

any plan to support maven?

Hi All,

 any plan to support maven ?
 For our teams,  we use maven to manage our projects. If it can be build with maven, will give us more convenience。
 thanks

getPID method get current process id improve speed

getPID method get current process id waste time,because of call
ManagementFactory.getRuntimeMXBean() every time. call only once ok.

public static long getPID() {
String processName = java.lang.management.ManagementFactory.getRuntimeMXBean().getName();
if (processName != null && processName.length() > 0) {
try {
return Long.parseLong(processName.split("@")[0]);
} catch (Exception e) {
return 0;
}
}
return 0;
}

proxy.properties contains ascii content

inconvenient to read
`
#\u6D88\u606F\u4E0B\u53D1\u5931\u8D25 \u6807\u8BB0\u5BA2\u6237\u7AEF\u9694\u79BB\u65F6\u95F4
proxy.server.tcp.pushFailIsolateTimeInMills=30000

#rebalance
proxy.server.tcp.RebalanceIntervalInMills=30000

#\u5BA2\u6237\u7AEFsession\u8FC7\u671F\u65F6\u95F4
proxy.server.session.expiredInMills=60000

#flow control,\u5206global\u7EA7\u522B\u548Csession\u7EA7\u522B
proxy.server.tcp.msgReqnumPerSecond=15000
proxy.server.session.upstreamBufferSize=20
proxy.server.session.downstreamUnackSize=100

#\u5168\u5C40\u8C03\u5EA6\u5668\u7EBF\u7A0B\u4E2A\u6570
`

miti language support?

At present, only Java SDKs are seen in the project.
Are there plans to support other multiple language SDK? such as go or python?

In some cases, Producer has an uneven sending flow

There are two topics, T1 {Q0, Q1} and T2 {Q0, Q1}

The following timings exist

  1. Counter = 0
  2. Send T1, 0% Queue Sizeof T1 = 0, send to T1-Q0
  3. Counter = 1
  4. Send T2, 1% Queue Sizeof T2 = 1, send to T2-Q0
  5. Counter = 2
  6. Send T1, 2% Queue Sizeof T1 = 0, still send to T1-Q0
  7. Counter = 3
  8. Send T2, 3% Queue Sizeof T2 = 1, still send to T2-Q0
    ...

It can be seen that in step 6, for T1, two consecutive transmissions are sent to Q0,
In the same way, in step 8, for T2, two consecutive transmissions are sent to Q0, and the transmission flow is not balanced

The counter is global. For Topic T1, when counter% T1's Queue number = T1 send step size, there will be a problem of unbalanced flow

How to do event governance ?

Does eventmesh has any component to do event governance?
How to do event governance if there are ten thousthands or event millions of events ?

When ack arrives at the server prior to the callback ,may cause ack problem

When the message is pushed by the method SessionPusher.push() from emesher server to client ,client will send an ack msg to server, and then the server will do ack logics. At the same time, the server will execute the callback of pushed msg.

  • Callback does: push the msg into unAcked map when msg has been pushed to client success.
  • Ack does: execute msg's ack, remove from unAcked map.

The problem: when ack arrives to server prior to the callback, the server may ack failed, because the msg has not been pushed to unAcked map.

contains never throw exception in method

method has catch the exception
public void sendResponse(ChannelHandlerContext ctx, DefaultFullHttpResponse response) { ctx.writeAndFlush(response).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture f) throws Exception { if (!f.isSuccess()) { httpLogger.warn("send response to [{}] fail, will close this channel", RemotingHelper.parseChannelRemoteAddr(f.channel())); f.channel().close(); return; } } }); }

subscribe nearby may cause instance overload

As described in docs, message queue will be allocated to instances in same IDC even if there is only one consumer. When some unexpected accident happen and there is only one consumer alive, it will bear the load of whole IDC, which may cause this consumer overload.

The feature of "auto expand or shrink queue number" will keep queue number equals to the number of alive consumer, which enable us to know alive consumer number by evaluating queue number. If there is only one alive consumer, break the "nearby" rule and send message to not only message queue would be better to avoid overload.

wrong toString() method tag about PushMessageResponseBody

the toString() method about PushMessageResponseBody named to sendMessageResponseBody
should be pushMessageResponseBody
`
@OverRide
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("sendMessageResponseBody={")
.append("retCode=").append(retCode).append(",")
.append("retMsg=").append(retMsg).append(",")
.append("resTime=").append(DateFormatUtils.format(resTime, Constants.DATE_FORMAT)).append("}");
return sb.toString();
}

`

When do you plan to open source completely?

下述这些功能大概什么时候可以开源? 有时间计划吗?

服务路由和定位:动态路由及定位(后续开源)
服务代理:TCP/HTTP及多语言的代理(后续开源)
服务治理:服务元数据的管理(后续开源)
平滑升级:平滑升级、平滑扩容(后续开源)

Suggest to improve the directory structure

For example, if you want to extend multiple storage modules, each storage module should have a separate folder in the eventmesh-store directory, and abstract common parent classes

Wanted: who's using EventMesh

Who is Using EventMesh
First of all, thanks sincerely for constantly using and supporting DeFiBus. We will try our best to keep DeFiBus better, and keep growing community and eco-system.

The purpose of this issue
We’d like to listen to the community to make EventMesh better.
We want to attract more people to contribute to EventMesh.
We're willing to learn more EventMesh use scenarios in the field for better planning.
What we expect from you
Pls. submit a comment in this issue to include the following infomation:

your company, school or organization.
your city and country.
your contact info: blog, email, twitter (at least one).
for what business scenario do you use DeFiBus
You can refer to the following sample answer for the format:

  • Orgnizatioin: WeBank
  • Location: ShenZhen, China
  • Contact: [email protected]
  • Purpose: used as cornerstone in distributed service architecture webank switched years ago.
    Thanks again for your participation !
    EventMesh & DeFiBus Team

谁在使用 EventMesh
首先诚挚地感谢每一位持续关注并使用 DeFiBus的朋友。我们会持续投入,力图把 EventMesh变得更好,把 DeFiBus社区和生态变得更加繁荣。

此 Issue 的目的
聆听社区的声音,让 EventMesh变得更好
吸引更多的人参与贡献
更多的了解 EventMesh的实际使用场景,以方便下一步的规划
我们期待您能提供
在此提交一条评论, 评论内容包括:

您所在公司、学校或组织
您所在的城市、国家
您的联系方式: 微博、邮箱、微信 (至少一个)
您将 EventMesh用于哪些业务场景
您可以参考下面的样例来提供您的信息:

  • 组织:微众银行
  • 地点:**深圳
  • 联系方式:[email protected]
  • 场景:微众银行内部服务化改造
    再次感谢你的参与!!!
    EventMesh 团队

Problem in /eventmesh/docs

It seems that the documents in the docs directory only introduce DefiBus, and lack introductions to EventMesh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.