Kafka(Go)教程(三)---Kafka 相关概念介绍

万字详解Kafka并附带go操作Kafka 本文一文讲懂Kafka基本原理以及操作Kafka的简单步骤 阅读详情

来自:指月 https://www.lixueduan.com

原文:https://www.lixueduan.com/post/kafka/03-kafka-introduction/

本文为 Kafka 入门教程,主要包括相关概念介绍如: 消息引擎、 Kafka 相关术语、角色定位及其版本选择等等。

1. 消息引擎

Kafka 系列相关代码见 Github

Kafka 是什么呢?

用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统。

消息引擎系统 这个词可能比较陌生,国内一般用得多的是消息队列或者消息中间件。不过相比之下 消息引擎系统 这个称谓可能更合适。

  • 消息队列给出了一个很不明确的暗示,仿佛 Kafka 是利用队列的方式构建的;
  • 而消息中间件的提法有过度夸张“中间件”之嫌,让人搞不清楚这个中间件到底是做什么的。
  • 消息引擎系统则更能提现出消息传递属性,就像引擎一样,具备某种能量转换传输的能力。

像 Kafka 这一类的系统国外有专属的名字叫 Messaging System,国内很多文献将其简单翻译成消息系统。

目前国内在翻译国外专有技术词汇方面做得确实够标准化,比如 Raft 算法和 Paxos 算法都属于 Consensus Algorithm 一族。但是国内一般称为 一致性算法,实际上 共识算法 比较准确。国外的 Consistency 被称为一致性、Consensus 也唤作一致性,甚至是 Coherence 都翻译成一致性。

消息系统有什么作用?脑子里想到的第一个词肯定是削峰填谷。

所谓的“削峰填谷”就是指缓冲上下游瞬时突发流量,使其更平滑。

比如下游系统处理能力为 10,上游压力则是在0~20动态变化的。假设第一秒上游压力为 20,第二秒为 0 ,如果没有消息系统直接把 20 的压力给到下游,由于处理不过来,有 10 的请求肯定会超时,然后第二秒没有压力下游也只能闲着。有消息系统后,直接将上游压力写入 消息系统,下游从消息系统中取出消息来处理,这样第一秒处理 10个,第二秒再处理 10 个,一直处于忙碌状态也不会出现超时的问题。

一个形象的比喻就是:

  • 用消息系统之前就是抱着水管喝水,水管出水量不会因为你喝不过来就变小;
  • 用消息系统之后就是拿瓶子喝水,每次倒多少水可以由自己控制。

2. Kafka 相关术语

Kafka 里的一些术语是其他 MQ 没有的,这里先提一下,后面遇到时能大致有个印象就行。

  • 消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。

  • 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。

  • 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。

  • 消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。

  • 副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。

  • 生产者:Producer。向主题发布新消息的应用程序。

  • 消费者:Consumer。从主题订阅新消息的应用程序。

  • 消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。

  • 消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。

  • 重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

3. Kafka 角色定位

Kafka 在设计之初就旨在提供三个方面的特性:

  • 提供一套 API 实现生产者和消费者;
  • 降低网络传输和磁盘存储开销;
  • 实现高伸缩性架构。

Apache Kafka 真的只是消息引擎吗?

目前 Kafka 官方文档写的是 Apache Kafka is an event streaming platform。即 Apache Kafka 不仅是消息引擎系统,还是一个流处理平台(Streaming Platform)。

Apache Kafka 从一个优秀的消息引擎系统起家,逐渐演变成现在分布式的流处理平台。

Kafka 社区于 0.10.0.0 版本正式推出了流处理组件 Kafka Streams,也正是从这个版本开始,Kafka 正式“变身”为分布式的流处理平台,而不仅仅是消息引擎系统了。

作为流处理平台,Kafka 与其他主流大数据流式计算框架相比,优势在哪里呢?

大概是 Kafka 自己对于流式计算的定位。官网上明确标识 Kafka Streams 是一个用于搭建实时流处理的客户端库而非是一个完整的功能系统。

对于中小企业来说,它们的流处理数据量并不巨大,逻辑也并不复杂,搭建重量级的完整性平台实在是“杀鸡焉用牛刀”,而这正是 Kafka 流处理组件的用武之地。

4. Kafka 类型选择

目前 有 3 种 Kafka 可供选择:

Apache Kafka 一般日常提到的 Kafka 都指的是 Apache Kafka,这是最“正宗”的 Kafka,也称为 社区版 Kafka。

Confluent Kafka,Confluent 公司是 Kafka 的 3 个创始人 Jay Kreps、Naha Narkhede 和饶军离开 LinkedIn 创办的,它主要从事商业化 Kafka 工具开发,并在此基础上发布了 Confluent Kafka。Confluent Kafka 提供了一些 Apache Kafka 没有的高级特性,比如跨数据中心备份、Schema 注册中心以及集群监控工具等。

Cloudera/Hortonworks Kafka:Cloudera 提供的 CDH 和 Hortonworks 提供的 HDP 是非常著名的大数据平台,里面集成了目前主流的大数据框架,当然也包括 Apache Kafka,因此我把这两款产品中的 Kafka 称为 CDH Kafka 和 HDP Kafka。

特点比较

Apache Kafka 它现在依然是开发人数最多、版本迭代速度最快的 Kafka,且社区比较活跃,对开发者友好。劣势在于它仅仅提供最最基础的组件,没有提供任何监控框架或工具。

如果你仅仅需要一个消息引擎系统亦或是简单的流处理应用场景,同时需要对系统有较大把控度,那么我推荐你使用 Apache Kafka。

Confluent Kafka 目前分为免费版和企业版两种。前者和 Apache Kafka 非常相像,除了常规的组件之外,免费版还包含 Schema 注册中心和 REST proxy 两大功能。后者用开放 HTTP 接口的方式允许你通过网络访问 Kafka 的各种功能,这两个都是 Apache Kafka 所没有的。

如果你需要用到 Kafka 的一些高级特性,那么推荐你使用 Confluent Kafka。

CDH/HDP Kafka,这些大数据平台天然集成了 Apache Kafka,通过便捷化的界面操作将 Kafka 的安装、运维、管理、监控全部统一在控制台中。使用起来非常方便,不过这样做的结果是直接降低了你对 Kafka 集群的掌控程度。

5. Kafka 演进历史

目前 Kafka 已经迭代到了 2.8.0 版本。再下载 Kafka 时会发现 Kafka 的版本号大概是这样的:

  • Scala 2.12 - kafka_2.12-2.8.0.gz
  • Scala 2.13 - kafka_2.13-2.8.0.gz

前面的版本号是编译 Kafka 源代码的 Scala 编译器版本,如 2.12 或者 2.13。

Kafka 服务器端的代码完全由 Scala 语言编写

后面 2.8.0 才是 Kafka 的版本号。由 3 个部分构成,即“大版本号 - 小版本号 - Patch 号“。

版本演进历史

版本号说明
0.7只有基础消息队列功能,无副本;打死也不使用
0.8增加了副本机制,新的producer API;建议使用0.8.2.2版本;不建议使用0.8.2.0之后的producer API
0.9增加权限和认证,新的consumer API,Kafka Connect功能;不建议使用consumer API;
0.10引入Kafka Streams功能,bug修复;建议版本0.10.2.2;建议使用新版consumer API
0.11producer API幂等,事物API,消息格式重构;建议版本0.11.0.3;谨慎对待消息格式变化
1.0、2.0Kafka Streams改进;建议版本2.0;
2.4消费者增量 Rebalance 支持
2.6显著性能优化
2.8替换掉 Zookeeper,元数据也存到 Kafka

最后还有个建议,不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致,否则你将损失很多 Kafka 为你提供的性能优化收益。

还有就是在生产环境不要贸然升级到最新版本,新版本多多少少都存在一些小问题,至少要在测试环境确认没问题后再升级。

Kafka 系列相关代码见 Github

6. 参考

https://kafka.apache.org/documentation

《Kafka 核心技术与实战》

kafka-go源码解析三(Reader) 概要 Reader是暴露给应用程序的接口,前一章提到的Consumer Group是集成在本类型中使用的。 之前提到的Consumer Group主要处理消费topic的相关metadata信息,如relabance,commit offset,heartbeat等。而Reader类主要负责从kafka brokers中拉取数据。Reader有两种使用模式,一是单topic单partition的情形,由Application自己去管理offset的信息;而是Consumer Group的情形。因此在代码 阅读详情

相关推荐

Golang 与 Kafka:如何实现消息的可靠传递与处理?

在现代分布式系统中,消息队列已成为解耦系统组件、实现异步通信的核心基础设施。Apache Kafka作为分布式流处理平台,因其高吞吐、低延迟和可扩展性而广受欢迎。而Golang凭借其简洁的语法、高效的并发模型和出色的性能,成为开发Kafka客户端应用的理想选择。本文旨在全面介绍如何利用Golang与Kafka实现消息的可靠传递与处理,涵盖从基础概念到高级实践的全方位内容。介绍Kafka核心概念与Golang客户端库深入分析消息可靠传递的关键机制提供完整的Golang实现示例。

AI Agent Harness Engineering 989

Go操作Kafka之kafka-go

Kafka是一种高吞吐量的分布式发布订阅消息系统,本文介绍了如何使用kafka-go这个库实现Go语言与kafka的交互。Go社区中目前有三个比较常用的kafka客户端库 , 它们各有特点。首先是IBM/sarama(这个库已经由Shopify转给了IBM),之前我写过一篇使用sarama操作Kafka的教程,相较于sarama, kafka-go 更简单、更易用。segmentio/kafka-go 是纯Go实现,提供了与kafka交互的低级别和高级别两套API,同时也支持Context。

宋发元 7184

golang结合Kafka消息队列实践(一)

公司决定使用kafka来作为新一代的消息队列来使用,于是开始对kafka的机制,原理,go客户端的使用,各种了解了一番,过程中也遇到了不少的坑,特地写出来,和大家分享,也供自己参考,加深印象。 首先,kafka的设计思想,各个角色比如broker,producer,consumer,partition等等还有与它们相关的配置,这里就先不作介绍了,官方文档都有,文章后面也会提到。 附上kafka...

jeffrey11223的博客 2万+

golang kafka客户端 sarama,segmentio/kafka-go ,confluent-kafka-go,franz-go比较

golang kafka客户端 sarama,segmentio/kafka-go ,confluent-kafka-go,franz-go哪个更好

王仁一的博客 2157

Kafka 在 Golang 中的实战案例:解决高并发场景下的消息处理

在分布式系统中,高并发场景下的消息处理面临吞吐量不足、延迟过高、可靠性差等挑战。Kafka 作为分布式流处理平台,具备高吞吐量、可扩展性和持久化特性,而 Golang(简称 Go)凭借原生并发模型(Goroutine + Channel)和高效的内存管理,成为构建高性能后端服务的首选语言。本文通过实战案例,演示如何利用 Go 语言集成 Kafka,实现高并发场景下的可靠消息处理,涵盖生产者、消费者设计、性能优化及异常处理等核心问题。背景介绍:明确目标、读者和术语定义核心概念与联系。

AI Agent Harness Engineering 1149

Golang 操作 Kafka 的 5 种高效方式,程序员必看!

本文旨在为 Golang 开发者提供操作 Kafka 的全面指南,重点介绍五种高效实现方式的技术细节和适用场景。内容涵盖从基础到高级的 Kafka 操作技巧,包括生产者和消费者的实现、性能优化、错误处理等核心话题。文章首先介绍 Kafka 和 Golang 的基本概念,然后详细讲解五种实现方式,每种方式都包含原理分析、代码示例和性能评估。最后讨论实际应用场景和工具推荐。Broker: Kafka 集群中的单个服务器节点Topic: 消息发布的类别或主题Partition。

AI Agent Harness Engineering 853

kafka-go

We rely on both Go and Kafka a lot at Segment. Unfortunately, the state of the Go client libraries for Kafka at the time of this writing was not ideal. The available options were:sarama, which is by far the most popular but is quite difficult to work with.

m0_70556273的博客 599

Kafka 在 Golang 中的实战教程:从基础到高级应用

本文旨在为Golang开发者提供一份完整的Kafka实战指南,涵盖从基础概念到高级应用的全方位内容。我们将重点介绍如何在Golang生态中高效使用Kafka,包括客户端选择、API使用、性能优化和错误处理等实用技巧。文章首先介绍Kafka核心概念和Golang客户端库,然后深入讲解生产者和消费者的实现,接着探讨高级特性和性能优化,最后通过实际案例展示Kafka在Golang项目中的应用。Broker: Kafka集群中的单个服务器节点Topic: 消息发布的类别或主题Partition。

AI Agent Harness Engineering 1184

kafka-go使用:以及kafka一些基本概念说明

作为开发人员kafka中最常关注的几个概念,是topic,partition和group这几个概念。topic是主题的意思,简单的说topic是数据主题,这样解释好像显得很苍白,只是做了个翻译。一图胜前言,我们还是通过图解来说明。生产者负责写数据,一个topic可以有多个分区。如下图所示,生产者写数据的示意。,即消息在某个分区上是有顺序的,而全局是没有顺序的。这个意味着如果我们需要保证顺序,我们在写消息时需要往同一个分区中写数据。比如,我们有一个场景,有一个订单。

ezreal_pan的博客 1235

Kafka 在 Golang 中的最佳实践:提升你的消息处理能力

Apache Kafka 作为分布式流处理平台,广泛应用于日志收集、事件驱动架构、微服务解耦等场景。Golang(简称 Go)凭借其高效的并发模型、简洁的语法和原生支持高性能网络编程的特性,成为 Kafka 客户端开发的理想选择。本文旨在通过系统化的技术解析,帮助开发者掌握在 Go 中使用 Kafka 的核心技术点,包括生产者配置、消费者组管理、消息可靠性保证、性能优化及常见问题处理。本文从基础概念入手,逐步深入到代码实现、性能优化和实战案例,最后提供工具资源和未来趋势分析。

AI Agent Harness Engineering 1292

microduck复刻实战:强化学习机器人从仿真训练到真机部署全攻略

强化学习是智能体通过与环境交互试错来学习最优策略的机器学习范式,在机器人控制领域,常借助物理仿真环境进行策略训练,以降低真实世界的试错成本。其核心原理是通过奖励信号引导策略网络迭代优化,PPO等算法则在稳定性和样本效率之间取得平衡。仿真训练的价值在于可批量验证控制策略,但仿真与真实硬件之间存在物理参数偏差,需通过域随机化等技术实现迁移。从四足机器人到仿生机器人,这类方案广泛应用于复杂运动控制任务。microduck作为一个典型的强化学习机器人项目,其复刻过程涉及环境搭建、奖励设计、PPO调参及Sim-to-

weixin_29061425的博客 361

go 操作kafka包 sarama 使用(示例)

go 操作kafka包 sarama 使用(一) 截止当前时间,github上golang操作kafka的包主要有两个: Shopify/sarama starts 5.7k confluentinc/confluent-kafka-go starts 2k saram 使用纯go语言编写, confluent-kafka-go 这是包装了c的api...

luslin1711的博客 7万+

实测对比:同步 vs 异步 DCDC,轻载时哪个更‘吵’?效率差多少?(以MP1601为例)

本文通过实测对比MP1601同步与异步DCDC在轻载工况下的噪声与效率表现,揭示异步整流在轻载时产生高频振铃的问题,而同步整流则提供更稳定的波形。测试数据显示,轻载下异步方案效率略高,但同步方案在EMI性能上优势明显,为工程选型提供重要参考。

weixin_30904593的博客 301

golang使用sarama生产和消费kafka

关于kafka相关架构及应用场景等,请见笔者相关文章。 1.消费kafka消息 package main import ( "fmt" "github.com/Shopify/sarama" cluster "github.com/bsm/sarama-cluster" "time" ) var ( kafkaConsumer *cluster.Consumer kafkaBrokers = []string{"127.0.0.1:9092"} kafkaTopic = "test_

翻过一座座山 8977

ADRV9026初始化避坑指南:手把手调试PostMcsInit常见故障

本文详细解析了ADRV9026多片同步初始化过程中的PostMcsInit常见故障,包括时钟校准失败、JESD链路建立问题和ARM核通信异常等。通过实际项目经验,提供了硬件检查清单、软件配置要点和分层诊断方法,帮助工程师快速定位和解决问题,提升系统稳定性。

hadoop5ranger的博客 621

OKCC呼叫中心部署实战指南:从零搭建高效外呼系统

本文提供OKCC呼叫中心系统的完整部署实战指南,从服务器选型、操作系统准备到详细安装步骤和性能优化,帮助企业从零搭建高效外呼系统。重点介绍FreeSWITCH核心组件的安装配置技巧,以及常见问题排查方法,助力企业提升客户服务效率。

weixin_29275257的博客 164

kafka的go版本api介绍及使用示例

一、概述 go语言版本的kafaka API,使用sarama和sarama-cluster包,支持offset追踪。生产和消费的过程,都是通过设置一个配置结构体开始的。并发量小时,可以用同步生产者,但是并发量大时,必须使用异步生产者。 1.1 安装依赖库sarama go get github.com/Shopify/sarama 该库要求kafka版本在0.8及以上,支持kafka定义的h...

moliyiran的专栏 1875

Unity游戏Google Play闪退?可能是这个隐藏设置惹的祸(附完整解决方案)

本文深度解析Unity游戏在Google Play上出现闪退的疑难问题,指出其根源可能在于Google Play后台的“应用完整性”设置与游戏原生库的冲突。文章提供了从崩溃日志分析、本地与线上版本对比测试,到调整Unity构建设置、审查第三方插件以及优化分发包配置的系统性排查与根治方案,帮助开发者彻底解决这一隐蔽问题。

weixin_29213827的博客 239

Go, Jocko, Kafka

本篇内容是根据2016年8月份# 31. Go, Jocko, Kafka 音频录制内容的整理与翻译 Travis Jeffery 参加了节目,谈论 Go、Jocko、Kafka、Kafka 的存储内部结构如何工作,以及有趣的 Go 项目和新闻。 Erik St. Martin: 大家好,欢迎回到《GoTime》的另一期节目。今天是第31期。我们的赞助商是 StackImpact 和 Backtrace。 今天的节目中有我自己,Erik St. Martin,还有 Carlisia Pinto…… C

techdashen的博客 1214

提示工程ROI计算模板:架构师私藏Excel表(含自动计算)

花3个人力优化提示词,到底能带来多少实际收益?“这个提示工程项目值得做吗?投入10万成本,多久能回本?“不同LLM应用的提示词优化优先级怎么排?全凭经验拍脑袋?当前90%的企业在提示工程投入上缺乏标准化的量化评估方法,导致资源浪费(盲目投入无回报项目)或错失机会(低估高价值优化点)。ROI = (总收益 - 总成本) / 总成本 × 100%对于提示工程,总成本=显性成本+隐性成本,总收益=直接收益+间接收益(后文会详细拆解)。提示工程的价值不是“玄学”,而是可以用数据量化的投资行为。本文分享的。

AI开发架构师 1077

python常用函数总结

普通函数:进制转换函数、关键字函数、数学函数、字符串函数、列表函数、元组函数、集合函数、字典函数. 栈和队列。 模块函数:math模块、OS模块、IO模块、Datetime模块、time模块、random模块、image模块、sys模块、calendar模块 高阶函数:map、reduce、filter、sorted 排列组合、正则表达式 ...

LDC,公众号【轻松学编程】 4万+

kafka-go SASL/SCRAM认证完整指南:安全连接Kafka集群的终极教程

在当今数据驱动的时代,Apache Kafka已成为企业级数据流处理的核心组件。随着安全意识的提升,如何安全地连接Kafka集群变得尤为重要。kafka-go作为Go语言中最流行的Kafka客户端库,提供了强大的SASL/SCRAM认证支持,让您的数据连接更加安全可靠。本文将为您详细介绍如何使用kafka-go实现SASL/SCRAM认证,确保您的Kafka连接万无一失。 ## 什么是SASL/

gitblog_01080的博客 849

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

dvlinker的技术专栏 7167

Go操作各大消息队列教程(RabbitMQ、Kafka)

Go操作各大消息队列教程(RabbitMQ、Kafka)

weixin_45565886的博客 2976

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

go操作kafka

1、下载包sarama Go语言中连接kafka使用第三方库:github.com/Shopify/sarama。 go get github.com/Shopify/sarama@v1.19 1.2 注意事项 sarama v1.20之后的版本加入了zstd压缩算法,需要用到cgo,在Windows平台编译时会提示类似如下错误: # github.com/DataDog/zstd exec: "gcc":executable file not found in %PA

weixin_42282999的博客 1501

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: Kafka(Go)教程(二)---hello Kafka
下一篇: Kafka(Go)教程(四)---Kafka 线上部署与集群参数配置
探索云原生
博客等级 码龄9年 730粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值