Kafka锦集(一):Kafka的介绍 | 下载和安装 | kafka服务无法关闭 | bin/kafka-server-stop.sh无效 | 总结的很详细

前言

从本篇开始,带你一起领略Kafka的世界,下面重点介绍它的下载、安装,带你避坑。

提示:如果你只是想解决“bin/kafka-server-stop.sh无效”的问题,直接下滑到文章尾部的4.2章节进行查看! 

一、Kafka介绍

1.1 什么是 Kafka

Kafka 是 Apache 基金会开源的一个分布式发布 - 订阅消息中间件,流处理平台。

它起源于 LinkedIn,由 Scala 和 Java两种语言编写而成。
在2011 年成为 Apache 项目,2012 成为 Apache 基金会下顶级项目。

1.2 为什么要用 Kafka

Kafka 专为分布式高吞吐系统而设计,支持离线、在线消费消息。
相比较其他消息中间件,如 RabbitMq 等,Kafka 具有更好的吞吐量,内置分区,复制和固有的容错能力,使得它非常适合应用在大数据领域。

1.3 kafka的特点

低延迟 - Kafka 支持低延迟消息传递,速度极快,能达到 200w 写/秒;
高性能 - Kafka对于消息的发布、订阅都具有高吞吐量。即使存储了 TB 级的消息,依然能够保证稳定的性能,日处理数据量可超过1 PB;
可靠性 - Kafka 是分布式,分区,复制和容错的,保证零停机和零数据丢失。
可拓展性 - Kafka 支持集群水平拓展。
耐用性 - Kafka 使用"分布式提交日志",消息能够快速的持久化的磁盘上。

1.4 kafka高吞吐率实现

为了增加存储能力,Kafka将所有的消息都写入到了低速大容量的硬盘。

Kafka采用以下方式实现高吞吐率:

顺序读写:Kafka将消息顺序追加到Partition中,顺序读写要快于随机读写。
批量发送:Kafka允许批量发送模式。
消息压缩:Kafka允许对消息集合进行压缩。
操作系统页缓存:不直接写IO,直接写入页缓存;消费时大多命中缓存。
Zero Copy:Kafka的生产者、消费者API对于Kafka消息采用零拷贝实现。Java类库通过java.nio.channels.FileChannel中的transferTo()方法(底层sendfile系统调用)在Linux和UNIX系统上支持Zero Copy,内核直接将数据从磁盘文件拷贝到Socket套接字,而无需通过应用程序。

1.5 kafka基本组件

序号 组件名称 组件的作用
1 Broker Kafka集群包含一个或多个服务器,这些服务器被称为Broker。
2 Topic 逻辑上通RabbitMQ的Queue队列相似,每条发布到Kafka集群的消息都必须有一个topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个Broker上,但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处。)
3 Partition 它是物理概念上的分区,为了提供系统吞吐率,在物理上每个Topic会分成一个或多个Partition,每个Partition对应一个文件夹(存储对应分区的消息内容和索引文件)。
4 Replica

为防止其中一个partition数据丢失,Replica副本的概念。

每个partition都可以通过副本因子添加多个副本,即便有一台机器故障了,其他机器上也有备份的数据集群环境下也会有其他副本。

5 Producer 消息生产者,负责生产消息并发送到Kafka Broker。
6 Consumer 消息消费者,向Kafka Broker读取消息并处理的客户端。
7 Consumer Group 每个Consumer属于一个特定的组(可为每个Consumer指定属于一个组,若不指定则属于默认组),组可以用来实现一条消息被组内多个成员消费等功能。

二、Kafka同类产品对比

常规的 MQ 系统都有两个比较通用的缺陷:
1) 数据丢失(当消费者无法及时消费数据时数据会被丢失);
2) 早期MQ产品很难配合数据的波峰和波谷。

2.1  Flume

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力,过程依赖于hadoop,操作过程基于channel(大多基于内存)。

缺点:资源占用较大,巨量数据处理时,效率不高。

实际使用体验,兼顾采集和轻量化的数据处理,既采集数据又计算处理,个人两种场景能力都一般,建议使用功能专一组件,kafka+flink或kafka+spark。

2.2  Redis

Redis是一个基于Key-Value对的NoSQL数据库,但支持MQ功能,可以作为轻量级

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值