【kafka学习记录】2 - kafka是什么

Kafka是一款分布式流处理平台,最初为解决数据实时处理难题而诞生。它不仅提供消息引擎服务,还拥有流处理框架KafkaStreams,能实现端到端的精确一次处理语义,适合中小企业的流式计算需求。Kafka以其高伸缩性、低延迟和数据正确性,在实时流处理领域与Apache Storm、Spark和Flink并驾齐驱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Kafka是消息引擎系统,也是一个分布式流处理平台。

 

kafka产生原因:

    之前有一些数据强实时处理方面的需求,但遇到了问题:

  1. 数据正确性不足。 因为数据的收集主要采用轮询(Polling)的方式,如何确定轮询的间隔时间就变成了一个高度经验化的事情。
  2. 系统高度定制化,维护成本高。各个业务子系统都需要对接数据收集模块,引入了大量的定制开销和人工成本。

    

所以kafka出现了。

    但后来大多公司都将kafka承接上下游, 所有的数据几乎都要从一个系统流入Kafka然后再流向下游的另一个系统中。

这样的使用方式屡见不鲜以至于引发了Kafka社区的思考:与其我把数据从一个系统传递到下一个系统中做处理,我为何不自己实现一套流处理框架呢?基于这个考量,Kafka社区于0.10.0.0版本正式推出了流处理组件Kafka Streams ,也正是从这个版本开始,Kafka正式“变身”为分布式的流处理平台,而不仅仅是消息引擎系统了。

    今天Apache Kafka是和Apache Storm、Apache Spark和Apache Flink同等级的实时流处理平台。

 

 

实时流处理是什么?

Kafka与其他主流大数据流式计算框架相比,优势在哪里

1、容易实现端到端的正确性。

     流处理要最终替代它的“兄弟”批处理需要具备两点核心优势:要实现正确性和提供能够推导时间的工具。

    目前主流的大数据流处理框架都宣称实现了精确一次处理语义(即都会产生且只会产生一条数据,但这是有限定条件的,即它们只能实现框架内的精确一次处理语义,无法实现端到端的。这是为什么呢?因为当这些框架与外部消息引擎系统结合使用时,它们无法影响到外部系统的处理语义。

比如一个普通的producer程序:producer需要接收到broker发送的response才能认为发送成功,如果response在传输过程中因为网络抖动丢失了或超时了(这种情况非常常见)而broker实际上已经写入了该消息,那么producer就会认为发送失败从而尝试重新发送,这就可能造成同一条消息被发送了多次。

    但Kafka则不是这样,因为所有的数据流转和计算都在Kafka内部完成,故Kafka可以实现端到端的精确一次处理语义。

 

2、对于流式计算的定位:适合中小企业。 还可以被用作分布式存储系统

流处理和批处理的区别是前者主要用于处理无限数据集(unbound data set)

每次执行批处理都能保证得到相同的值,但是流处理无法做到这一点。批处理一般采用fail-fast来保证即使中间出现错误也能实现正确性

JMXTrans + InfluxDB + Grafana

 

 

kafka的几种版本

  • Apache Kafka,也称社区版Kafka。优势在于迭代速度快,社区响应度高,使用它可以让你有更高的把控度;缺陷在于仅提供基础核心组件,缺失一些高级的特性。

  • Confluent Kafka,Confluent公司提供的Kafka。优势在于集成了很多高级特性且由Kafka原班人马打造,质量上有保证;缺陷在于相关文档资料不全,普及率较低,没有太多可供参考的范例。

  • CDH/HDP Kafka,大数据云公司提供的Kafka,内嵌Apache Kafka。优势在于操作简单,节省运维成本;缺陷在于把控度低,演进速度较慢。

 

 

kafka的版本号( 重要

Kafka服务器端的代码完全由Scala语言编写,Scala同时支持面向对象编程和函数式编程,用Scala写成的源代码编译之后也是普通的“.class”文件,因此我们说Scala是JVM系的语言,它的很多设计思想都是为人称道的。

版本号:

大 + 小 + 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.11版本:producer API幂等,事物API,消息格式重构;建议版本0.11.0.3;谨慎对待消息格式变化

1.0和2.0版本:Kafka Streams改进;建议版本2.0;

 

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

 


 

问:

1.kafka如何做压力测试,它的参考主要指标是什么,比如QPS,最大连接数,延迟等等。

2.扩容如何做到平滑扩容,不影响原业务

3.kafka有什么好的监控软件。

 

回答:

1. Kafka提供了命令行脚本可以执行producer和consumer的性能测试,主要指标还是TPS,延时

2. 增加broker很简单,也不会对现有业务有影响。关键是做好迁移计划——比如避开业务高峰时刻,如果迁移对业务影响最小

 

Kafka社区将其清晰地定位为一个分布式、分区化且带备份功能的提交日志(Commit Log)服务。

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

  • 提供一套API实现生产者和消费者;

  • 降低网络传输和磁盘存储开销;

  • 实现高伸缩性架构。

它是如何做到这三点的?后续说明。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值