apache / rocketmq-externals

Mirror of Apache RocketMQ (Incubating)
4.58k stars 3.07k forks source link

[SoC] Apache RocketMQ Channel for Knative #569

Open RongtongJin opened 4 years ago

RongtongJin commented 4 years ago

Knative is a kubernetes based platform for building, deploying and managing modern serverless applications. Knative to provide a set of middleware components that are essential to building modern, source-centric, and container-based applications that can run anywhere: on-premises, in the cloud, or even in a third-party data centre. Knative consists of the Serving and Eventing components. Eventing is a system that is designed to address a common need for cloud-native development and provides composable primitives to enable late-binding event sources and event consumers. Eventing also defines an event forwarding and persistence layer, called a Channel. Each channel is a separate Kubernetes Custom Resource.

RocketMQ Channel is to provide data persistence and event distribution for the Knative platform. The main functions of RocketMQ Channel are RocketMQ Cluster management (including cluster parameter configuration and topic maintenance), event reception, event storage, and event distribution. Instead of storing events directly, RocketMQ Channel stores events to the rocketmq cluster by calling the RocketMQ Go client. RocketMQ Channel is Kubertenes CRD and can be deployed through kubectl apply. RocketMQ Channel includes three components: controller, dispatcher and clent go.

This topic requires you to implement RocketMQ Channel, including

  1. Before implementing RocketMQ Channel, you need to learn RocketMQ Go Client and implement the required admin tool instructions.
  2. Implement RocketMQ Channel for Knative based on Apache RocketMQ.

Knative是一个基于kubernetes用于构建,部署和管理现代的无服务器应用程序的平台。Knative提供了一组中间件组件,这些组件对于构建可在任何地方运行以源为中心和基于容器的应用程序必不可少。Knative由服务和事件组件组成。事件处理旨在满足云原生开发的普遍需求,并提供可组合的原语以实现后期绑定事件源和事件使用者。事件还定义了事件转发和持久层,称为Channel。每个Channel都是一个单独的Kubernetes自定义资源。

RocketMQ Channel主要定位是为Knative平台提供数据持久化以及事件分发。RocketMQ Channel主要功能有RocketMQ集群管理(包括集群参数配置、Topic维护)、事件接收、事件存储以及事件分发。RocketMQChannel不会直接存储事件,而是通过调用RocketMQ Go 客户端将事件存储到RocketMQ集群。RocketMQChannel是Kubertenes的CRD,可以通过kubectl apply 部署。RocketMQChannel具体包括Controller、Dispatcher、Client-Go三个组件。

本题目希望你能实现一个RocketMQ Channel,包括 1.根据RocketMQ Channel的需求,学习RocketMQ Go Client,并实现需要的Admin Tool指令 2.实现RocketMQ Channel的相关组件。

image

Yiyiyimu commented 4 years ago

Hi @RongtongJin ! I'm quite interested in this project for asoc. Do you suggest me starting from studying rocketmq-client-go, or do you have some other guideline/evaluation tasks or suggestions to get familiar with this project?

RongtongJin commented 4 years ago

@Yiyiyimu, Welcome to the RocketMQ community. It is recommended that you learn RocketMQ Go Client. You need to understand the basic concepts of RocketMQ and how to use it. In addition, you need to learn and understand Knative for this project. Looking forward to your participation.

Yiyiyimu commented 4 years ago

@Yiyiyimu, Welcome to the RocketMQ community. It is recommended that you learn RocketMQ Go Client. You need to understand the basic concepts of RocketMQ and how to use it. In addition, you need to learn and understand Knative for this project. Looking forward to your participation.

Thank you for your suggestions!

Yiyiyimu commented 4 years ago

Hi @RongtongJin , sorry for the delayed reply, I've been caught by the graduation project a bit.

I just get myself familiar with RocketMQ & Go Client and Knative. I want to make clear that if I could say the two requirements are:

  1. migrating topic&cluster client tools from the original java version, since right now go client could only support operations on producer and consumer. Do I need to migrate all of them or will there be some preferences?
  2. build the channel with reference of Kafka channel for Knative like this. Since I think the structure and also the aim of them are quite alike, I guess I could use the Kafka one as a reference. Also does 'Clent-Go' mean 'client go' and represent the client of the channel? Since it is not shown on the graph, I'm a bit confused about this part.

Thank you for your reply and hope I could finish my proposal on time!

RongtongJin commented 4 years ago

Hi @Yiyiyimu Glad to hear from you again. For two questions: 1. You do not need to migrate all but only the functions you need to use. 2. Sorry for the misspelling of words misled you. 'Clent-Go' means 'client go’ and is part of rocketmq channel. In addition, you can certainly refer toimplemention of Kafka channel for Knative. Finally, looking forward to your proposal.

Yiyiyimu commented 4 years ago

Thank you @RongtongJin for your prompt reply!