Kafka的替代者Redpanda的架构及部署

开发 架构
Redpanda完全兼容KafkaAPI,也就是说,开发项目中不需要修改kafka客户端相关的代码,可以直接替换掉kafka。

介绍

Redpanda 使用C++编写,是一个与 Kafka兼容的流数据平台,事实证明它的速度提高了10 倍。它还不含 JVM、不含 ZooKeeper、经过 Jepsen 测试且源代码可用。

Redpanda完全兼容KafkaAPI,也就是说,开发项目中不需要修改kafka客户端相关的代码,可以直接替换掉kafka。

因为是C++编写,所以无需使用JVM,分布式协调使用raft协议,所以也无需使用zookeeper。只有一个可执行二进制文件,部署非常方便。

架构

最近十年计算机硬件发生了不少变化:

硬盘由于NVMe协议的SSD,快了1000倍;网络快了100倍;云计算更加便宜;但是CPU速度增长不多,所以通过多核的办法来解决。从这个趋势来看,CPU似乎成了新的瓶颈。

在这种背景下,Redpanda为了适应现代计算机硬件的发展,设计了自己的架构:

这种架构称为Thread-Per-Core。上面提到,现代计算机有很多个核心。为了充分利用多核,就需要用到线程。但是线程会遇到两个主要的问题:1、在一些需要同步的时候必须用到lock,2、Context Switch成本较高。

而Thread-Per-Core架构就是为了解决这两个主要的问题,有几个core就建几个thread,而且将thread绑定到特定的core上,因为不会有更多的thread,所以尽可能的减少了context switch。另外,Redpanda的每一个thread只负责处理各自的partition,所以也不需要用到lock。你可能会想,那I/O怎么处理?阻塞了thread怎么办?在linux 5.1版本内核以后,增加了一个完全异步的io模型——io_uring

io_uring使用用户空间建立的两个queue:sq(submit queue)和cq(complete queue)来完成io操作。read和write操作放入sq,这一步是异步的,然后应用程序可以去做别的事情,待kernel完成工作后,就将结果放入cq,应用程序需要检查io结果的时候就去cq中查即可。在这种模式下,因为有sq的存在,所以相当于系统调用是批量的,也就是内核处理io是批量的。这样也就充分利用了现代硬件的优势,比如NVMe的SSD硬盘,可以并行处理很多IO操作。

Redpanda的kafka client发送消息到Redpanda,其实是发送到了某一core上,当这个core不负责某个partition时,就会通过rpc通知到其他core上的thread进行处理。在这里Redpanda并不使用grpc或者thrift,而是使用自己实现的轻量级rpc来达到完美的速度。当有多个Redpanda节点时,使用raft协议进行数据共识。

综上,Redpanda达到了3个目的:

  • 操作简单。只有一个二进制可执行文件,部署简单,无需jvm、zk。
  • 尽可能的零数据丢失。使用raft协议保障数据安全。
  • 实测比kafka快10倍。Thread-Per-Core架构和io_uring的加持,使得其比kafka更快。

部署

Redpanda可以部署到docker、linux、win、macOS、kubernetes上。当直接安装到docker、linux、win、macOS上的时候,在安装完,如果需要非本机访问的话,需要在参数中配置advertising地址和端口,这样才能在外部访问

下面说下kubernetes部署。

https://github.com/redpanda-data/helm-charts

在这个地址下载helm chart,然后进去找到values.yaml,主要需要修改的是storage这个地方:

修改成合适的storageClass,选择好空间大小,然后执行:

helm install redpanda redpanda     --namespace redpanda     --create-namespace

即可安装成功。

责任编辑:姜华 来源: 今日头条
相关推荐

2011-12-02 09:53:34

2022-08-01 07:07:05

Python人工智能机器学习

2009-08-21 09:34:59

XML-PRCEasyrest

2009-05-26 10:40:17

九城魔兽王者世界

2015-07-16 15:30:34

分布式计算PS云计算

2016-01-04 11:12:56

LiFiWi-Fi

2014-10-22 14:04:50

傲游浏览器

2010-05-11 10:03:55

ApacheLighttpdNginx

2010-05-19 08:28:57

Traffic SerApache

2009-12-29 17:40:33

2009-05-14 09:20:41

关系数据库对象关系映射Terracotta

2009-03-27 18:01:00

LinuxNovell SLEDWindows

2015-12-01 16:02:19

WiFiLiFi

2014-05-23 18:05:19

2014-07-26 15:22:31

赵修湘关系型数据库Hive数据仓库

2009-05-04 18:19:43

编程语言排行榜D语言

2020-11-17 09:00:00

Kafka架构物联网

2018-01-02 05:08:43

互联网人工智能5G

2017-07-14 16:41:12

软件架构视点

2021-10-14 15:42:53

消息队列KubeMQKafka
点赞
收藏

51CTO技术栈公众号