Knative 实战:基于 Kafka 实现消息推送

作者 | 元毅 阿里云智能事业群高级开发工程师
导读:当前在 Knative 中已经提供了对 Kafka 事件源的支持,那么如何基于 Kafka 实现消息推送呢?本文作者将以阿里云 Kafka 产品为例,给大家解锁这一新的姿势。
背景
消息队列 for Apache Kafka 是阿里云提供的分布式、高吞吐、可扩展的消息队列服务。消息队列 for Apache Kafka 广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等大数据领域,已成为大数据生态中不可或缺的部分。
结合 Knative 中提供了 KafkaSource 事件源的支持, 可以方便的对接 Kafka 消息服务。
另外也可以安装社区 Kafka 2.0.0 及以上版本使用。
在阿里云上创建 Kafka 实例
创建 Kafka 实例
登录消息队列 Kafka 控制台, 选择【购买实例】。由于当前 Knative 中 Kafka 事件源支持 2.0.0 及以上版本,在阿里云上创建 Kafka 实例需要选择包年包月、专业版本进行购买,购买之后升级到 2.0.0 即可。

部署实例并绑定 VPC
购买完成之后,进行部署,部署时设置 Knative 集群所在的 VPC 即可:

创建 Topic 和 Consumer Group
接下来我们创建 Topic 和消费组。
进入【Topic 管理】,点击 创建 Topic, 这里我们创建名称为 demo 的 topic:

进入【Consumer Group 管理】,点击 创建 Consumer Group, 这里我们创建名称为 demo-consumer 的消费组:

部署 Kafka 数据源
部署 Kafka addon 组件
登录容器服务控制台,进入【Knative 组件管理】,部署 Kafka addon 组件。

创建 KafkaSource 实例
首先创建用于接收事件的服务 event-display:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/eventing-sources-cmd-event_display:bf45b3eb1e7fc4cb63d6a5a6416cf696295484a7662e0cf9ccdf5c080542c21d
接下来创建 KafkaSource:
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: KafkaSource
metadata:
name: alikafka-source
spec:
consumerGroup: demo-consumer
# Broker URL. Replace this with the URLs for your kafka cluster,
# which is in the format of my-cluster-kafka-bootstrap.my-kafka-namespace:9092.
bootstrapServers: 192.168.0.6x:9092,192.168.0.7x:9092,192.168.0.8x:9092
topics: demo
sink:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
name: event-display
说明:
- bootstrapServers: Kafka VPC 访问地址
- consumerGroup: 设置消费组
- topics:设置 Topic
创建完成之后,我们可以查看对应的实例已经运行:
[root@iZ2zeae8wzyq0ypgjowzq2Z ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
alikafka-source-k22vz-db44cc7f8-879pj 1/1 Running 0 8h
验证
在 Kafka 控制台,选择 topic 发送消息,注意这里的消息格式必须是 json 格式:

我们可以看到已经接收到了发送过来的 Kafka 消息:
[root@iZ2zeae8wzyq0ypgjowzq2Z ~]# kubectl logs event-display-zl6m5-deployment-6bf9596b4f-8psx4 user-container
☁️ CloudEvent: valid ✅
Context Attributes,
SpecVersion: 0.2
Type: dev.knative.kafka.event
Source: /apis/v1/namespaces/default/kafkasources/alikafka-source#demo
ID: partition:7/offset:1
Time: 2019-10-18T08:50:32.492Z
ContentType: application/json
Extensions:
key: demo
Transport Context,
URI: /
Host: event-display.default.svc.cluster.local
Method: POST
Data,
{
"key": "test"
}
小结
结合阿里云 Kafka 产品,通过事件驱动触发服务(函数)执行,是不是简单又高效。这样我们利用 Knative 得以把云原生的能力充分释放出来,带给我们更多的想象空间。欢迎对 Knative 感兴趣的一起交流。
实操视频演示链接:https://v.qq.com/x/page/d3013wzs3tp.html
作者简介:元毅,阿里云容器平台高级开发工程师,负责阿里云容器平台 Knative 相关工作。
欢迎加入 Knative 交流群

“ 阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”
Knative 实战:基于 Kafka 实现消息推送的更多相关文章
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- Android 基于Netty的消息推送方案之对象的传递(四)
在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...
- Android 基于Netty的消息推送方案之字符串的接收和发送(三)
在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...
- Android 基于Netty的消息推送方案之概念和工作原理(二)
上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...
- Android 基于Netty的消息推送方案之Hello World(一)
消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地 ...
- 基于FCM的消息推送功能
需求背景 我方项目需要支持客户端消息推送,iOS终端可以借由苹果本身的apns很方便的实现,但是对于Android来说,必须集成第三方的SDK来处理.考虑到项目需要以及成本,我们选择使用谷歌的FCM框 ...
- Push:iOS基于APNS的消息推送
1. Push的三个步骤,如下图所示: (1)Push服务应用程序把要发送的消息.目的iPhone的标识打包,发给APNS: (2)APNS在自身的已注册Push服务的iPhone列表中,查找有相应标 ...
- android基于XMPP的消息推送机制
关于服务器端向Android客户端的推送,主要有三种方式:1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据.但是实现简单,主要缺点:耗电等2.Google的 ...
- 用kafka实现消息推送
一个人知道的Topic是单点推送,大家都知道Topic是广播. kafka消息消费机制: 1.广播消费:通过定义topic前缀来标识属于广播的消息(例如:topicname:gonggao153568 ...
随机推荐
- java 线程监控
线程的五种状态 * 新建:new * 运行:runnable * 等待:waitting(无限期等待),timed waitting(限期等待) * 阻塞:blocked * 结束:terminate ...
- python+selenium一:对浏览器的常规操作
# 1.打开Firefox浏览器 from selenium import webdriverdriver = webdriver.Firefox()driver.get("https:// ...
- 在IIS上启用WordPress子域名模式多站点功能
昨天负责网站的支持人员向我反馈在我们负责托管网站的WordPress在启动多站点功能后,浏览新站点或访问新站点的"Dashboard"时,都会反馈“404”错误.我检查了WordP ...
- 从零开始入门 K8s | 应用编排与管理:Job & DaemonSet
一.Job 需求来源 Job 背景问题 首先我们来看一下 Job 的需求来源.我们知道 K8s 里面,最小的调度单元是 Pod,我们可以直接通过 Pod 来运行任务进程.这样做将会产生以下几种问题: ...
- HNU_中小学数学卷子自动生成程序(个人项目)简要分析
一.前言 首先,在这里特别感谢我的结对编程伙伴HnuLyx,他在算法上和设计思路上都与我有很大的不同,个人项目互评中,为我的项目提出了很多很好的建议,让我在认清自己不足的同时,了解到很多以前没有注意的 ...
- Redis数据库之编程项目及练习资源
实训项目 : NOSQL数据库设计与应用实训 注释: Redis数据库编程项目示例及练习资源 项目源码获取: https://pan.baidu.com/s/19f0F7cmx ...
- Linux 中文打字软件 gtypist 光标错位解决
在windows 下有 金山打字和其他的跟打软件,在Linux下找到了 gtypist 为练习中文打字,该软件分为练习模式的速度测试模式,在gtypist-2.9.5版中会出现以下几个问题: 一是在练 ...
- mybatis-dynamic-query 3.0 更新
项目地址: mybatis-dynamic-query 前言 在 2.0 完成对 tk.mapper 集成,为何 mybatis-dynamic-query 选择 tk.mapper 集成, 再 3. ...
- CentOS7 搭建php环境
1,先安装apache: yum install httpd 配置ServerName,进入httpd.conf文件: vi /etc/httpd/conf/httpd.conf 将#ServerNa ...
- 在创建activiti5..22所需的25张表时 ,所用的方法和遇到的问题。
最近在学习关于activiti流程设计的相关内容,首先第一步就需要了解25张activiti相关的表,具体的每张表的含义 请自行百度. 这里讲一下 用java代码生成所需要的25张表,很简单: pub ...