阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

kafka替代者:Redpanda的架构及部署

94次阅读
没有评论

共计 1736 个字符,预计需要花费 5 分钟才能阅读完成。

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

kafka 替代者:Redpanda 的架构及部署

介绍

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

kafka 替代者:Redpanda 的架构及部署

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

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

架构

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

kafka 替代者:Redpanda 的架构及部署

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

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

kafka 替代者: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

kafka 替代者:Redpanda 的架构及部署

o_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 地址和端口,这样才能在外部访问

    kafka 替代者:Redpanda 的架构及部署

    下面说下 kubernetes 部署。

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

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

    kafka 替代者:Redpanda 的架构及部署

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

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

    即可安装成功。

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1736字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中