网易首页 > 网易号 > 正文 申请入驻

阿里云函数计算对接kafka实战

0
分享至

新钛云服已为您服务1068


背景需求

阿里云函数计算式是按调用次数来计算费用的,无需服务器就能进行后端的一些处理,对于调用次数不是特别多的场景比较适用。可以节省成本,但是如果调用次数很多对服务器性能要求不是特别高的情况下建议还是用ECS来部署服务。



函数计算对接kafka实战

新建服务和函数

新建服务比较容易基本只要输入一个服务名称即可

新建函数使用HTTP 函数,新手也可以尝试使用模版函数

配置函数

这里主要注意函数入口这个配置,Handler 的格式为 [文件名].[函数名]。例如创建函数时指定的 Handler 为 index.handler,那么文件名为 index.py,入口函数为 handler。

配置触发器

这里只是为了测试所以认证方式使用anonymous。


代码开发

首先要在代码根目录下安装python连接kafka的依赖包

pip install -t . kafka-python

然后开始编写setting.py这个是连接kafka的配置信息

vim setting.py

kafka_setting = {
'bootstrap_servers': ["XXX", "XXX", "XXX"], #kafka连接地址
'topic_name': 'XXX', #使用的topic名称
'consumer_id': 'XXX' #使用的Consumer Group
}

然后开始编写入口文件index.py

# -*- coding: utf-8 -*-
# 导入连接kafka所需依赖包和配置
import socket
from kafka import KafkaProducer
from kafka.errors import KafkaError

import setting

conf = setting.kafka_setting

print conf

HELLO_WORLD = b"Hello world!\n"

def handler(environ, start_response):
context = environ['fc.context']
request_uri = environ['fc.request_uri']
for k, v in environ.items():
if k.startswith("HTTP_"):
# process custom request headers
pass

# get request_body
try:
request_body_size = int(environ.get('CONTENT_LENGTH', 0))
except (ValueError):
request_body_size = 0
request_body = environ['wsgi.input'].read(request_body_size)

# get request_method
request_method = environ['REQUEST_METHOD']

# get path info
path_info = environ['PATH_INFO']

# get server_protocol
server_protocol = environ['SERVER_PROTOCOL']

# get content_type
try:
content_type = environ['CONTENT_TYPE']
except (KeyError):
content_type = " "

# get query_string
try:
query_string = environ['QUERY_STRING']
except (KeyError):
query_string = " "

print 'request_body: {}'.format(request_body)
print 'method: {}\n path: {}\n query_string: {}\n server_protocol: {}\n'.format(request_method, path_info, query_string, server_protocol)
# do something here

status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)

#以下是kafka操作部分,发送一个消息到kafka
producer = KafkaProducer(bootstrap_servers=conf['bootstrap_servers'],
api_version = (0,10),
retries=5)

partitions = producer.partitions_for(conf['topic_name'])
print 'Topic 下分区: %s' % partitions

try:
future = producer.send(conf['topic_name'], 'hello aliyun-kafka test!')
future.get()
print 'send message succeed.'
except KafkaError, e:
print 'send message failed.'
print e
# return value must be iterable
return [HELLO_WORLD]

备注:上面的函数脚本分别参考了阿里云的函数计算Hello World示例和python连接kafka示例,参考url如下:

Hello World示例 https://help.aliyun.com/document_detail/74756.html?spm=a2c4g.11186623.6.573.2be3dc876slGKm

python连接kafka示例 https://code.aliyun.com/alikafka/aliware-kafka-demos/blob/master/kafka-python-demo/vpc/aliyun_kafka_producer.py

Hello World示例必须要,因为这个是Http函数,需要加http请求参数和返回的状态码等信息。environ, start_response这两个参数是必选项。不加参数无法通过。具体信息可以查看帮助文档。


代码上传

通过文件夹和压缩包均可以上传代码

环境设置

配置服务允许访问VPC内资源

配置kafka所在安全组允许被函数计算内网地址访问

由于函数计算地址用的是域名,通过ping得到函数计算内网地址,然后用大段的子网覆盖它,避免ip变更导致无法访问

配置函数计算访问kafka权限,这里给了管理权限,生产环境可以根据实际情况配自定义权限

测试运行

直接点击代码执行下的执行按钮就能运行

查看结果

总结

函数计算对很多人来说还是一个新鲜的工具。未来也许会成为一种趋势。因为它不需要服务器,且在公司初期量不大的前提下能节省成本和运维维护的成本。

了解新钛云服

往期技术干货

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
仅差51次!仅差16个!约基奇迎来神级里程碑,威少的纪录保不住了

仅差51次!仅差16个!约基奇迎来神级里程碑,威少的纪录保不住了

世界体育圈
2026-03-25 18:18:53
偶遇沈月拍戏,个子不高的情况下胸大真的太吃亏了!

偶遇沈月拍戏,个子不高的情况下胸大真的太吃亏了!

TVB的四小花
2026-03-24 12:22:03
一看就很“穷”的4种打扮,自以为洋气,实际廉价寒酸还烂大街

一看就很“穷”的4种打扮,自以为洋气,实际廉价寒酸还烂大街

不甜的李子
2026-03-07 12:25:09
原本想着搂草打兔子,结果却是赔了夫人又折兵,王海打假胖东来,折射出商业打假的不严谨。

原本想着搂草打兔子,结果却是赔了夫人又折兵,王海打假胖东来,折射出商业打假的不严谨。

问道求真
2026-03-26 01:17:46
女子赴发小婚礼穿瑜伽裤,打扮过于火辣,网友直呼跟没穿似的

女子赴发小婚礼穿瑜伽裤,打扮过于火辣,网友直呼跟没穿似的

一盅情怀
2026-03-16 17:28:45
台海第1枪打响后,解放军全力收台,96个小时内就能结束战斗?

台海第1枪打响后,解放军全力收台,96个小时内就能结束战斗?

暮雨咋歇着
2026-03-25 05:35:58
伊朗这一场战争,以色列等了半世纪

伊朗这一场战争,以色列等了半世纪

黔有虎
2026-03-24 19:08:13
张雪峰的独生女真的很有主意,父母问孩子要不要生二胎,她说不用

张雪峰的独生女真的很有主意,父母问孩子要不要生二胎,她说不用

海阔山遥YAO
2026-03-25 15:30:12
江苏省未来缴费年限15年提高至20年,多缴多少钱?多领多少钱?

江苏省未来缴费年限15年提高至20年,多缴多少钱?多领多少钱?

暖心人社
2026-03-25 21:26:58
斥资418亿!广州新机场开工建设,佛山人沸腾!

斥资418亿!广州新机场开工建设,佛山人沸腾!

GA环球建筑
2026-03-25 22:08:17
中伊通话后中方宣布通航,美媒称美国落败

中伊通话后中方宣布通航,美媒称美国落败

晨光苏醒a
2026-03-26 01:21:25
别再喊王思雨老婆了!看她的择偶标准,真给你机会,你能达标吗?

别再喊王思雨老婆了!看她的择偶标准,真给你机会,你能达标吗?

萌兰聊个球
2026-03-25 10:11:51
国家终于出手了!不仅是李梓萌被牵连,就连全红婵张文宏也没逃过

国家终于出手了!不仅是李梓萌被牵连,就连全红婵张文宏也没逃过

达西伍红
2025-12-25 20:20:58
中央动真格救生育率!3代人拍手叫好的新提议,这次来真的了

中央动真格救生育率!3代人拍手叫好的新提议,这次来真的了

老特有话说
2026-03-24 15:24:12
这是我见过穿得最高级的50+女人,衣简利落,凭“叠穿”让人惊艳

这是我见过穿得最高级的50+女人,衣简利落,凭“叠穿”让人惊艳

小陈聊搭配
2026-03-25 19:39:58
美国彻底慌了?!苹果CEO库克抛出惊人言论,振聋发聩!

美国彻底慌了?!苹果CEO库克抛出惊人言论,振聋发聩!

南权先生
2026-03-13 15:46:35
禁赛25场!3年1.62亿,乔治正式道歉!

禁赛25场!3年1.62亿,乔治正式道歉!

左右为篮
2026-03-25 12:35:22
出国打球?李梦正式发声,下家3选1,有望获宫鲁鸣认可重返国家队

出国打球?李梦正式发声,下家3选1,有望获宫鲁鸣认可重返国家队

萌兰聊个球
2026-03-25 14:32:07
好消息!2026年城管进驻小区,乱停、油烟、违建、噪音都有人管

好消息!2026年城管进驻小区,乱停、油烟、违建、噪音都有人管

另子维爱读史
2026-03-24 21:12:59
中东石油危机引爆?美俄成最大赢家,中国笑而不语,甩出一张王牌

中东石油危机引爆?美俄成最大赢家,中国笑而不语,甩出一张王牌

阅识
2026-03-25 07:35:06
2026-03-26 05:23:00
新钛云服
新钛云服
云管理服务专家
462文章数 30关注度
往期回顾 全部

科技要闻

红极一时却草草收场,Sora宣布正式关停

头条要闻

伊朗:正在搜捕逃亡美军

头条要闻

伊朗:正在搜捕逃亡美军

体育要闻

35岁替补门将,凭什么入选英格兰队?

娱乐要闻

张雪峰遗产分割复杂!是否立遗嘱成关键

财经要闻

管涛:中东局势如何影响人民币汇率走势?

汽车要闻

智己LS8放大招 30万内8系旗舰+全线控底盘秀实力

态度原创

教育
数码
亲子
旅游
公开课

教育要闻

那些躺平的孩子,其实是看透了父母的伪装

数码要闻

英特尔发布基于第三代酷睿Ultra处理器vPro平台

亲子要闻

爸爸的肩膀,永远是你最坚实的依靠

旅游要闻

“女王驾到” 上海温室花园高山杜鹃展开幕,中外游客打卡点赞,Beautiful!Amazing!Fantastic!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版