kafka 对外提供服务方案简述

2024-04-06 18:58

本文主要是介绍kafka 对外提供服务方案简述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

首先,用户数据会经过 kafka 队列传递到我们的业务层。我们希望用户能够通过一个通用层接入我们的kafka服务,但是有的用户希望能够直接连到我们的 kafka 上面,这就需要我们的 kafka 对外暴露broke服务以便被接入。那么如何保证用户数据接入的可靠性和安全性,就成为了这篇文章的主要内容。

目标

我们希望其他公司数据接入的方式尽量松耦合,尽量不依赖内部架构,而对于一些用户要直接接入 kafka 的要求也可以支持。同时,还要保证数据在传递过程中的安全性,防止恶意的连接攻击等。具体如下几点: 
1. 接入方式尽量松耦合; 
2. 连接的可靠性,即只有特定的用户或IP 可以建立连接; 
3. 数据的安全性,传递过程中的数据是经过加密的; 
4. 支持用户直连 kafka 的broke,但客户端的所有行为都是被许可的。

方案设计

首先,我们希望用户的接入方式是简单的、通用的、安全的,是不影响内部业务逻辑的。其次,对于那些指定要直连 kafka 的接入方式,也应该是支持的。那么下面就有了两种情况:普通接入方式和 kafka 接入方式。

普通接入方式

近年来,当提到业务对接或者数据传递的时候,大家首先想到的就是“调接口”,那么这个“接口”其实也就是HTTP 接口,大家普遍认为是最普通的、也是最简单的一种数据传递方式,那么,既然普通简单,那就是我们所需要的。 
所以,接入流程应该是这样的:接入方先调用我们的HTTP 接口,然后我们在web服务中把数据传递到kafka中,然后再到我们的业务层。如图: 


 
这样,就达到了我们的目标1,即,连接的松耦合。这样,那么我们就可以随意改变kafka的部署方式或者内部连接方式,随意增删broke,而不用去担心会影响用户的使用,就像加入了一个适配器一样。当然,此时,broke之间是以内网地址进行互连的,甚至我们可以直接使用现有的kafka集群而不需要对其做任何改动。 
但是另一方面,我们还要保证连接的可靠和数据的安全,上面的方式显然是不能够达到的,因为谁都可以接入且数据也是明文的。那就需要继续在这个设计基础上进行改进,对HTTP协议的安全升级策略也很常见,只需将HTTP换成HTTPS即可。但,常见的HTTPS只能保证对其一方的认证和数据的加密,就像我们上百度网站一样,百度是不会对我们每个人进行认证识别的,因为百度不在意我们是谁。可是,我们在意到底是谁接入了我们的服务,所以,这里应该是双向认证。 
下面来谈谈HTTPS的好处。首先,比较常见,就是加入了SSL/TLS的HTTP;其次,可以保证数据在传递过程中的安全性,因为数据在传输过程中是密文的形式,就算是被劫取也没关系;再者,我们可以对客户端可以进行身份互相认证识别,只要我们彼此的私钥和CA证书不被泄露,那么连接双方的身份就是确定的。 
同时,为了进一步加强连接的可靠性,我们还可以让特定的IP接入,即使用IP白名单策略保证连接的可靠性。 
改进之后的数据流向图: 


 
这种方式我也称之为HTTP接入方式,当一个用户需要使用我们的 IOT,那么接入的方式就应该优先使用这种方式。

KAFKA 接入方式

所谓的kafka 接入,就是指用户使用kafka的客户端程序直连broke服务群的方式。这种接入方式就需要暴露broke来提供用户连接,需要给出连接broke的IP和端口。 
为了实现我们的既定目标,也需要把client和broke之间加入类似SSL的安全层协议,幸好,kafka对client支持tls和sasl两种认证方式,在这之间,我选择tls双向认证。

What is SASL?SASL是一个依赖于其他协议的框架,本质上是一个间接层,允许在现有的应用程序协议中插入可插入的身份验证系统和数据安全性(e.g LDAP, SMTP, Subversion, …)。
它是否以及如何提供安全的身份验证和数据加密,很大程度上取决于该框架内使用的底层机制。如果使用SASL中,可以选择使用GSSAPI、Kerberos、NTLM等。

如上个接入方式所说,tls双向认证协议保证了双方的可靠性,同时也能保证数据的安全性。在这种情况下,我们能够保证连接到我们kafka的客户端都是我们允许的,只是并不能约束客户端的行为,比如说,客户端可以随意读取所有的topic数据,这显然是不能允许的。 
还好,kafka支持使用ACL权限控制机制。kafka附带一个可插拔的认证,并使用zookeeper来存储所有的acl。kafka的acl在一般格式定义”Principal P is [Allowed/Denied] Operation O From Host H On Resource R”,意思就是说可以使某个资源针对特定IP特定用户进行特定的操作。 
例子:假设你要添加一个acl “以允许198.51.100.0和198.51.100.1,Principal为User:Bob和User:Alice对主题是Test-Topic有Read和Write的执行权限” 。可通过以下命令实现:

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic

这样,其实就能很好的达到我们的要求:进行细粒度的权限控制。 
所以,这种情况下,接入的数据流程图应该是这样的: 


 
那么现在问题又来了,当我们的内网需要使用这群kafka的时候,也需要进行配置tls双向认证吗?显然是不需要的,一来太麻烦,二来没必要,因为不会有不信任的连接,也不会泄露数据,三的话就是使用tls双向认证会大幅度影响效率,延长建立连接的时间。 
这样的话,就应该采用混合式的连接方式比较好,若干broke提供对外网的连接,若干broke提供对内网的连接,而所有的broke之间采用文本的方式传输数据。改进后的设计图如下: 


 
方案定论 
综合以上两种接入方式,我们既要支持HTTP接入,又要支持kafka接入方式,那么最后的部署方式应该是这样的:


原文:https://blog.csdn.net/hohoo1990/article/details/79128329 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于kafka 对外提供服务方案简述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880581

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于