返回顶部
首页 > 资讯 > 前端开发 > html >在Kubernetes上运行Kafka合适吗
  • 858
分享到

在Kubernetes上运行Kafka合适吗

2024-04-02 19:04:59 858人浏览 薄情痞子
摘要

这篇文章主要讲解了“在kubernetes上运行kafka合适吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Kubernetes上运行Kafka合适吗”

这篇文章主要讲解了“在kubernetes上运行kafka合适吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Kubernetes上运行Kafka合适吗”吧!

介绍

Kubernetes设计的初衷是运行无状态工作负载。这些通常采用微服务架构的工作负载,是轻量级,可水平扩展,遵循十二要素应用程序,可以处理环形断路和随机Monkey测试

另一方面,Kafka本质上是一个分布式数据库。这意味着你必须处理状态,它比微服务更重量级。Kubernetes支持有状态的工作负载,但你必须谨慎对待它,正如Kelsey  Hightower在最近的两条推文中指出的那样:

在Kubernetes上运行Kafka合适吗

现在你应该在Kubernetes上运行Kafka吗?我的反问是:没有它,Kafka会跑得更好吗?这就是为什么我要指出Kafka和Kubernetes之间的相互补充性以及你可能遇到的陷阱。

运行时

让我们先看一下基本的东西——运行时本身。

进程

Kafka brokers对CPU很友好。TLS可能会引入一些开销。如果Kafka客户端使用加密,则需要更多CPU,但这不会影响brokers。

内存

Kafka brokers是内存消耗大户。JVM堆通常可以限制为4-5  GB,但由于Kafka大量使用页面缓存,因此还需要足够的系统内存。在Kubernetes中,可以相应地设置容器资源限制和请求。

存储

容器中的存储是短暂的——重启后数据将丢失。可以对Kafka数据使用emptyDir卷,这将产生相同的效果:brokers的数据将在停机后丢失。您的消息在其他broker上作为副本还是可以使用的。因此,重新启动后,失败的broker必须得复制所有的数据,这可能是一个耗时过程。

这就是你应该使用持久存储的原因。使用XFS或ext4的非本地持久性块存储更合适。我警告你:不要使用NFS。NFS  v3和v4都不会起作用。简而言之,Kafka  broker会因为NFS“愚蠢重命名”问题而无法删除数据目录,自行终止。如果你仍然不相信我,那么请仔细阅读这篇博文。存储必须是非本地的,以便Kubernetes在重新启动或重新定位时可以更灵活地选择另一个节点。

网络

与大多数分布式系统一样,Kafka性能在很大程度上取决于低网络延迟和高带宽。不要试图将所有代理放在同一节点上,因为这会降低可用性。如果Kubernetes节点出现故障,那么整个Kafka集群都会出现故障。不要跨数据中心扩展Kafka集群。这同样适用于Kubernetes集群。不同的可用区域是一个很好的权衡。

配置

清单

Kubernetes网站包含一个非常好的教程,介绍如何使用清单设置ZooKeeper。由于ZooKeeper是Kafka的一部分,因此可以通过这个了解哪些Kubernetes概念被应用在这里。一旦理解,您也可以对Kafka集群使用相同的概念。

  • Pod:Pod是Kubernetes中最小的可部署单元。它包含您的工作负载,它代表群集中的一个进程。一个Pod包含一个或多个容器。整体中的每个ZooKeeper服务器和Kafka集群中的每个Kafka  broker都将在一个单独的Pod中运行。

  • StatefulSet:StatefulSet是一个Kubernetes对象,用于处理需要协调的多个有状态工作负载。StatefulSets保证Pod的有序性和***性的。

  • Headless  Services:服务通过逻辑名称将Pod与客户端分离。Kubernetes负责负载平衡。但是,对于ZooKeeper和Kafka等有状态工作负载,客户端必须与特定实例进行通信。这就是  Headless Services发挥作用的地方:作为客户端,仍然可以获得逻辑名称,但不必直接访问Pod。

  • 持久卷:如上所述,需要配置非本地持久块存储。

Yolean提供了一套全面的清单,可以帮助您开始使用Kubernetes上的Kafka。

Helm Charts

Helm是Kubernetes的包管理器,类似yum,apt,Homebrew或Chocolatey等OS包管理器。它允许您安装Helm  Charts中描述的预定义软件包。精心设计的Helm  Charts能简化所有参数正确配置的复杂任务,以便在Kubernetes上运行Kafka。有几张图表适用于Kafka的的可供选择:一个是处于演进状态的官方图表,一个来自Confluent,另一个来自Bitnami,仅举几例。

Operators

由于Helm的一些限制,另一种工具变得非常流行:Kubernetes  Operators。Operators不仅可以为Kubernetes打包软件,还可以为Kubernetes部署和管理一个软件。

评价很高的Operators名单中提到Kafka有两个,其中一个是Strimzi,Strimzi使得在几分钟内启动Kafka集群变得非常容易,几乎不需要任何配置,它增加了一些漂亮的功能,如群集间点对点TLS加密。Confluent还宣布即将推出新的Operator。

性能

运行性能测试以对Kafka安装进行基准测试非常重要。在您遇到麻烦之前,它会为您提供有关可能的瓶颈的地方。幸运的是,Kafka已经提供了两个性能测试工具:kafka-producer-perf-test.sh和kafka-consumer-perf-test.sh。记得经常使用它们。作为参考,可以使用Jay  Kreps的博客结果,或者 Stéphane Maarek在 Amazon MSK的评论。

运维

监控

可见性非常重要,否则您将不知道发生了什么。如今,有一种不错的工具可以用云原生方式监控指标。prometheus和Grafana是两种流行的工具。Prometheus可以直接从JMX导出器收集所有Java进程(Kafka,ZooKeeper,Kafka  Connect)的指标。添加cAdvisor指标可为提供有关Kubernetes资源使用情况的其他信息。

Strimzi为Kafka提供了一个优雅的Grafana仪表板示例。它以非常直观的方式可视化关键指标,如未复制的和离线分区。它通过资源使用和性能以及稳定性指标来补充这些指标。因此,可以免费获得基本的Kafka集群监控!

在Kubernetes上运行Kafka合适吗

资料来源:https://strimzi.io/docs/master/#kafka_dashboard

可以通过客户端监控(消费者和生产者指标),使用Burrow滞后监控,使用Kafka Monitor进行端到端监控,来完成这个任务

日志记录

日志记录是另一个关键部分。确保Kafka安装中的所有容器都记录到标准输出(stdout)和标准错误输出(stderr),并确保Kubernetes集群将所有日志聚合到中央日志记录设施中如elasticsearch中。

健康检查

Kubernetes使用活跃度和就绪探测器来确定Pod是否健康。如果活跃度探测失败,Kubernetes将终止容器并在相应设置重启策略时自动重启。如果准备就绪探测失败,那么Kubernetes将通过服务从服务请求中删除该Pod。这意味着在这种情况下不再需要人工干预,这是一大优点。

滚动更新

StatefulSets支持自动更新:滚动更新策略将一次更新一个Kafka  Pod。通过这种方式,可以实现零停机时间,这是Kubernetes带来的另一大优势。

扩展

扩展Kafka集群并非易事。但是,Kubernetes可以很容易地将Pod缩放到一定数量的副本,这意味着可以声明式地定义所需数量的Kafka  brokers。困难的部分是在放大或缩小之前重新分配部分。同样,Kubernetes可以帮助您完成这项任务。

管理

通过在Pod中打开shell,可以使用现有的shell脚本完成Kafka群集的管理任务,例如创建主题和重新分配分区。这不是一个很好的解决方案。Strimzi支持与另一个Operator管理主题。这还有改进的余地。

备份和还原

现在Kafka的可用性还取决于Kubernetes的可用性。如果Kubernetes群集出现故障,那么在最坏的情况下Kafka群集也会故障。墨菲定律告诉我们,这也会发生在你身上,你会丢失数据。要降低此风险,请确保您具有备份想法。MirrORMaker是一种可选方案,另一种可能是利用S3进行连接备份,如Zalando的博客文章所述。

感谢各位的阅读,以上就是“在Kubernetes上运行Kafka合适吗”的内容了,经过本文的学习后,相信大家对在Kubernetes上运行Kafka合适吗这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 在Kubernetes上运行Kafka合适吗

本文链接: https://lsjlt.com/news/85484.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Kubernetes上运行Kafka合适吗
    这篇文章主要讲解了“在Kubernetes上运行Kafka合适吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Kubernetes上运行Kafka合适吗”...
    99+
    2024-04-02
  • Go语言适合在Apache服务器上运行吗?
    随着互联网技术的快速发展,Web服务器的性能和可靠性成为了开发者们关注的焦点。Apache作为最早的开源Web服务器,一直被广泛使用。那么,对于Go语言开发者来说,Apache服务器是否是一个好的选择呢? 首先,我们需要了解一下Go语言和...
    99+
    2023-06-27
    http apache django
  • 在Kubernetes上运行MySQL数据库 Running MySQL on Kubernetes
    作者:禅与计算机程序设计艺术 1.简介 Kubernetes是一个开源系统用于自动部署、扩展和管理容器化的应用,在该系统中部署MySQL数据库也是同样重要的工作。本文将详细阐述如何在Kubernete...
    99+
    2023-09-30
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • Python vs. Bash:哪个更适合在Apache上运行?
    Python 和 Bash 都是非常流行的编程语言,它们都可以在 Apache 服务器上运行。但是,哪个更适合在 Apache 上运行呢?在本文中,我们将探讨 Python 和 Bash 的优缺点,以及它们在 Apache 上的适用性。 P...
    99+
    2023-07-23
    bash ide apache
  • (八) 在Kubernetes上运行MySQL数据库 Running MySQL on Kubernetes
    作者:禅与计算机程序设计艺术 1.简介 Kubernetes(简称K8s)是一个开源的、用于管理云平台中容器化的应用的开源系统。在Kubernetes的框架下,可以轻松部署容器化的应用程序,同时让它...
    99+
    2023-09-24
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • Kubernetes上怎么运行PostgreSQL
    本篇内容介绍了“Kubernetes上怎么运行PostgreSQL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建统一管理的,具备灵活性的...
    99+
    2023-06-27
  • golang适合运维吗
    golang适合运维,Golang作为一种高效、并发性强的编程语言,对于运维工作来说是一个非常好的选择。具体表现:1、go具有高性能、简洁、开发生态丰富等特点,使得在处理大量并发请求时更加高效,而其并发机制使得能够充分利用服务器的资源,提高...
    99+
    2023-07-25
  • 怎么在Kubernetes上运行高可用的WordPress和MySQL
    小编给大家分享一下怎么在Kubernetes上运行高可用的WordPress和MySQL,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在Kubernetes上运行...
    99+
    2023-06-15
  • MySQL tinyint适合物流运输吗
    MySQL的tinyint数据类型可以用来存储整数值,范围在-128到127之间。对于物流运输方面的数据,如果涉及到表示状态、类型、数量等较小范围的整数值,tinyint是一个合适的数据类型。 例如,可以使用tinyint来表示货物状态(如...
    99+
    2024-07-30
    mysql
  • Python 能够在 Apache 上实时运行吗?
    Python 是一门非常流行的编程语言,用途广泛,包括机器学习、数据分析、Web 开发等。而 Apache 是一个广泛使用的 Web 服务器软件,支持多种编程语言。那么, 答案是肯定的。Apache 本身并不支持 Python,但是可以通...
    99+
    2023-08-25
    实时 apache bash
  • ASP 框架是否适合在 Linux 容器中运行?
    ASP框架是一个广泛使用的Web应用程序框架,它提供了一种快速开发Web应用程序的方式,使开发人员可以更加专注于业务逻辑的实现,而不用过多关注底层技术实现。然而,对于ASP框架是否适合在Linux容器中运行,这个问题还没有一个确定的答案,接...
    99+
    2023-08-25
    框架 linux 容器
  • 在 Mac 上运行 PHP
    在本文中,我们将介绍在 Mac 上运行 PHP 的方法。 使用 php -S 命令在 Mac 上运行 PHP PHP 是一种服务器端语言。它在服务器上运行。因此,它需要一个网络服务器来运行。有...
    99+
    2024-02-27
  • ASP和Django:哪个更适合在Windows上进行索引?
    在Web开发中,ASP和Django是两个非常流行的框架。它们都拥有自己的优点和适用场景,但是当我们需要在Windows上进行索引时,哪一个框架更为适合呢?本文将从ASP和Django的特点、索引方式和适用环境三个方面来探讨这个问题。 一...
    99+
    2023-08-24
    django windows 索引
  • GO和JavaScript:哪个更适合在Linux实时环境中运行?
    在Linux实时环境中运行程序是一项非常重要的任务,因为这些程序需要快速、准确、可靠地响应输入和输出。GO和JavaScript都是流行的编程语言,但在Linux实时环境中,哪个更适合呢?本文将探讨这个问题,并比较GO和JavaScrip...
    99+
    2023-06-26
    javascript 实时 linux
  • Mac系统是否适合运行Golang程序?
    Mac系统是否适合运行Golang程序? 近年来,Golang(Go语言)作为一种开发效率高、性能优越的程序设计语言,受到了越来越多开发者的青睐。那么,作为Mac用户,我们是否可以顺利...
    99+
    2024-03-02
    mac golang 适合 go语言 golang开发
  • 你知道吗?JavaScript也能在Linux上实时运行!
    JavaScript是一种常用的脚本语言,主要应用于网页开发中,但是你是否知道,它也可以在Linux上实时运行呢?在本文中,我们将介绍如何在Linux上使用Node.js实时运行JavaScript代码。 Node.js是一个基于Chro...
    99+
    2023-06-26
    javascript 实时 linux
  • ASP和Django:哪个更适合在Linux上进行Web开发?
    随着互联网技术的快速发展,Web开发已经成为了一种非常热门的技能。ASP和Django是两种非常流行的Web开发框架,它们都有着自己的优势和劣势,但是哪个更适合在Linux上进行Web开发呢?这是一个非常有趣的问题,本文将会探讨ASP和Dj...
    99+
    2023-09-20
    django linux 文件
  • 香港云服务适合游戏行业吗
    香港云服务适合游戏行业:1、香港云服务提供高防抗DDOS攻击的服务器,能有效保护游戏行业的利益;2、香港云服务响应速度快,能保证游戏用户的网站体验感;3、香港云服务的配置多样化,能满足游戏行业的配置需求;4、香港云服务的数据处理能力强,能同...
    99+
    2024-04-02
  • 哪些设备适合运行Go语言程序?
    《哪些设备适合运行Go语言程序?》,需要具体代码示例 Go语言是一种由Google开发的开源编程语言,它具有高效的编译速度、简洁的语法结构和强大的并发特性,因此备受程序员的喜爱。那么,...
    99+
    2024-04-02
  • NumPy是否适合在Unix系统上进行分布式计算?
    NumPy是Python中非常流行的一个数值计算库,它提供了丰富的数值计算工具和高效的数组操作,被广泛应用于科学计算和数据分析等领域。但是,在大规模数据处理和分布式计算方面,NumPy能否胜任呢?本文将探讨NumPy在Unix系统上进行分...
    99+
    2023-09-24
    numpy 分布式 unix
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作