一、Kafka是什么?
Kafka是最初由Linkedin公司开发的一个分布式、分区的、多副本的、多订阅者,由Scala和Java编写的基于zookeeper协调的分布式流处理平台,常见可以用于web日志、访问日志,消息服务等等,Linkedin于2010年将其贡献给了Apache基金会并成为顶级开源项目。
1、Kafka的核心架构和功能
Kafka的核心功能是:高性能的消息发送与高性能的消息消费;其核心架构如下图:

2、Kafka主要功能可以用以下三句话概括
生产者发送消息给kafka服务器
消费者从kafka服务器读取消息
Kafka服务器依托zookeeper集群进行服务的协调管理

3、Kafka中涉及到的术语
broker:一般中文翻译为经纪人,掮客,代理人,但这些词不能很好的表达broker的意思,所以只要知道broker是表示kafka服务器即可;
message:消息,使用紧凑的二进制字节数据来保存消息,节省内存空间和传输效率;
topic:主题,代表了一类消息;
partition:分区,kafka采用topic-partition-message的三级结构来分散负载;
offset:位移,分区下每条消息都被分配一个位移值,表示消息在分区中的位置;需要注意到是消息者也有位移的概念;
replica:副本,备份多份日志,防止数据丢失;分为两类:领导者副本(leader replica)和追随者副本(follower replica);
leader和follower:领导者和追随者,通常leader对外提供服务,follower只是被动地追随leader的状态,保持与leader的同步,充当leader的候补,以便leader挂掉后被选举成新的leader接替它的工作;
ISR(in-sync replica):表示与leader replica保持同步到replica集合,

4、Kafka安装及使用实例
1)下载安装包
Kafka的下载地址:https://kafka.apache.org/downloads

当前最新版本是:
kafka_2.11-2.3.1.tgz
kafka_2.12-2.3.1.tgz
这两个文件中2.11/2.12分别表示编译Kafka的Scala语言版本,后面的2.3.1是Kafka的版本。从稳定性上看Scala2.11版本编译的Kafka更好一些,所以我们可以下载kafka_2.11-2.3.1.tgz。
下载完成后上传到我们服务器上
2)安装
解压缩:
tar -zxvf kafka_2.11-2.3.1.tg
cd kafka_2.11-2.3.1
启动Kafka(启动之前首先应该安装JDK8)
Kafka解压缩后可以直接运行,进入可执行文件目录并查看可执行文件,如下图所示:

3)启动ZooKeeper
首先要启动ZooKeeper服务器(ZooKeeper是为Kafka提供协调服务的工具),
Kafka内置了一个ZooKeeper,可以直接启动:./zookeeper-server-start.sh …/config/zookeeper.properties

[2019-10-28 09:22:17,425] INFO Reading configuration from: ../config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2019-10-28 09:22:17,437] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper.server.DatadirCleanupManager)
[2019-10-28 09:22:17,437] INFO autopurge.purgeInterval set to 0 (org.apache.zookeeper.server.DatadirCleanupManager)
[2019-10-28 09:22:17,437] INFO Purge task is not scheduled. (org.apache.zookeeper.server.DatadirCleanupManager)
[2019-10-28 09:22:17,438] WARN Either no config or no quorum defined in config, running  in standalone mode (org.apache.zookeeper.server.quorum.QuorumPeerMain)
[2019-10-28 09:22:17,487] INFO Reading configuration from: ../config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2019-10-28 09:22:17,488] INFO Starting server (org.apache.zookeeper.server.ZooKeeperServerMain)
[2019-10-28 09:22:17,512] INFO Server environment:zookeeper.version=3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT (org.apache.zookeeper.server.ZooKeeperServer)
[2019-10-28 09:22:17,512] INFO Server environment:host.name=localhost (org.apache.zookeeper.server.ZooKeeperServer)
[2019-10-28 09:22:17,512] INFO Server environment:java.version=1.8.0_25 (org.apache.zookeeper.server.ZooKeeperServer)
…
[2019-10-28 09:22:17,586] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)

当看到启动日志中出现0.0.0.0/0.0.0.0:2181时,基本上已经启动成功(使用端口2181)
4)启动kafka
接着启动Kafka服务器:启动命令:./kafka-server-start.sh …/config/server.properties

[2019-10-28 09:22:45,571] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
[2019-10-28 09:22:46,495] INFO Registered signal handlers for TERM, INT, HUP (org.apache.kafka.common.utils.LoggingSignalHandler)
[2019-10-28 09:22:46,497] INFO starting (kafka.server.KafkaServer)
[2019-10-28 09:22:46,499] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
[2019-10-28 09:22:46,547] INFO [ZooKeeperClient Kafka server] Initializing a new session to localhost:2181. (kafka.zookeeper.ZooKeeperClient)
…
[2019-10-28 09:22:50,272] INFO Kafka version: 2.3.1 (org.apache.kafka.common.utils.AppInfoParser)
[2019-10-28 09:22:50,273] INFO Kafka commitId: 18a913733fb71c01 (org.apache.kafka.common.utils.AppInfoParser)
[2019-10-28 09:22:50,273] INFO Kafka startTimeMs: 1572225770265 (org.apache.kafka.common.utils.AppInfoParser)
[2019-10-28 09:22:50,281] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

启动日志中出现[KafkaServer id=0] started(kafka.server.KafkaServer)表示Kafka启动成功(服务端口默认为9092)
5)创建主题(topic)
Kafka启动成功后我们要创建一个主题(topic)用消息的发送与消费,以下日志创建一个名为test的主题,主题中只有一个分区(partition)和一个副本(replica)。
./kafka-topics.sh --create --zookeeper localhost:2181 --topic test --partitions 1 --replication-factor 1
主题创建成功后可以查看该主题状态:
6)查看主题(topic)
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

[root@localhost bin]# ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test  PartitionCount:1    ReplicationFactor:1 Configs:Topic: test Partition: 0    Leader: 0   Replicas: 0 Isr: 0``7)生产消息
Kafka提供了脚本攻击可以不断地接收标准输入并发送到指定的主题上。该脚本工具启动命令如下:
./kafka-console-producer.sh --broker-list localhost:9092 --topic test
`

[root@localhost bin]# ./kafka-console-producer.sh --broker-list localhost:9092 --topic test

hello world!
this my first Kafka example;

``打开这个控制台后可以不断地输入字符形成消息,按回车键后该文本就会被发送。按Ctrl+C组合键退出。
8)消费消息
Kafka也提供了对应的脚本用户消费指定主题下的消息并打印到标准输出。
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
`

[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello world!
this my first Kafka example;

二、kafka设计思路要点
1、消息引擎系统


消息引擎系统用于在不同的应用间传输消息的系统,所以其他设计包含两个重要因素:消息设计、传输协议设计
消息设计:Kafka的消息是用二进制方式来保存的结构化消息;
传输协议设计:Kafka自定义一套二进制的消息传输协议;

2、消息引擎范型:
1)消息队列模型
基于队列提供消息传输服务,多用于进程/线程间通信。该模型定义了消息队列、发送者和接收者,提供了一种点对点的消息传递方式。典型示例:客服接电话

2)发布/订阅模型
定义了类似于生产者、消费者这样的角色及发布者和订阅者。发布者将消息生产出来发送到指定的主题中,所有订阅了该主题的订阅者都可以接收到该主题下的所有消息。典型示例:报纸订阅

Kafka同时支持这两种消息引擎范型,其设计初衷就是为了解决互联网公司超大量级数据的实时传输。

3、kafka高吞吐量、低延时的设计思路
Kafka设计之初就考虑了以下4个方面的问题,

Kafka做到高吞吐量、低延时的设计思路是:每次写入操作都只是把数据写入到操作系统的页缓存中,然后由操作系统自行决定什么时候把页缓存中的数据写回磁盘上。读取消息时会首先从OS的页缓存中读取,如果命中便把消息经页缓存直接发送到网络的Socket上(零拷贝技术)。
三、kafka使用场景
Kafka以消息引擎闻名,它特别适合处理生产环境中的那些流式数据,以下是其在实际应用中的一些典型使用场景。

小结:
本文介绍了kafka的基本概念,设计思路及其使用场景,需要深入理解kafka的同学可以去到网站http://kafka.apachecn.org/或者阅读《Apache kafka实战》;需要《Apache kafka实战》同学可以关注我们的微信公众号,回复“kafka”获取下载地址。

Kafka能干什么,为什么如此受欢迎?相关推荐

  1. 【Kafka】Kafka数据可靠性深度解读

    2019独角兽企业重金招聘Python工程师标准>>> Kafka起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩 ...

  2. 消息系统kafka原理解析

    Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Clouder ...

  3. kafka数据可靠性深度解读

    本文收录于InfoQ,未经允许不得转载. 欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客 ...

  4. kafka 发布-订阅模式_使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...

    kafka 发布-订阅模式 发布-订阅消息系统在任何企业体系结构中都起着重要作用,因为它可以实现可靠的集成而无需紧密耦合应用程序. 在解耦的系统之间共享数据的能力并不是一个容易解决的问题. 考虑一个企 ...

  5. 使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...

    发布-订阅消息系统在任何企业体系结构中都起着重要作用,因为它可以实现可靠的集成而无需紧密耦合应用程序. 在解耦的系统之间共享数据的能力并不是一个容易解决的问题. 考虑一个企业,其中具有使用不同语言和平 ...

  6. Kafka和Unix管道的示例

    2019独角兽企业重金招聘Python工程师标准>>> 想象下有这样的对话. 你: 什么是Apache Kafka? 我: Apache Kafka是发布-订阅消息系统,分布式的提交 ...

  7. Kafka(生产者)

    Kafka 1.概述 1.1 消息队列 1.1.1 传统消息队列的应用场景 1.1.2 消息队列的两种模式 1.2 kafka基础结构 2.kafka的快速入门 2.1 集群部署 2.1.1 安装ja ...

  8. Kafka安装web界面监控工具(kafka-manager)

    目录 简介 安装 启动kafka-manager 测试kafka-manager 输出信息关键参数 简介 Kafka默认是没有web界面的,需要自己安装web界面监控工具 可以使用三方开源的监控工具, ...

  9. Pulsar 和 Kafka 基准测试报告(完整版)

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

最新文章

  1. SCOM 2012系列⑨单台服务器拓扑监控
  2. 状态很差时,就不要再继续做了。因为是徒劳,再就是过段时间或第二天再看,会豁然开朗,原来存在的疑难问题都迎刃而解。平时没事的时候要不断地给自己充电,让自己了解多方面知识。...
  3. ruby array_Ruby中带有示例的Array.fill()方法(3)
  4. 模型相关:修改模型的坐标原点到用户的自定义位置
  5. gnuplot 使用时遇到的问题
  6. java 打印gc_java – 以编程方式打印启用GC日志记录时通常在JVM出口上打印的堆使用情况...
  7. day 07总结(数字类型内置方法/字符串类型内置方法)
  8. 计算机路由器上网配置,电脑如何设置路由器上网?
  9. 什么流读取MultipartFile_IO流 - ShelterY
  10. 提问的价值,你了解多少?
  11. python 条形图 负值_使用python matplotlib获取正负值的堆积条形图
  12. Android 打包apk出错问题
  13. (二) OGNet 论文笔记
  14. 部署-GPS授时系统:GPS授时系统
  15. Vue.directive()的用法和实例
  16. 局域网共享故障的分析与排除
  17. TC358743xbg是一颗将HDMI信号转换成MIPI CSI2的芯片
  18. 微信小程序跳转公众号链接
  19. vue-handsontable常用配置项
  20. 40G QSFP+超长距离传输光模块丨40G QSFP+ ER4/ZR4

热门文章

  1. html重要的form标签
  2. 【众智】【MindSpore】ST报错
  3. 一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除
  4. 【C语言初阶】C语句成员1:分支语句
  5. 单车车路:中国的车路双智能到底有多牛?丨曼孚科技
  6. mymps蚂蚁分类信息系统IP数据库更新教程(ipdata.dat)
  7. JavaScript网页全屏API
  8. Flutter 图片如何充满父布局
  9. Compiz-fusion(3D特效)的安装与配置
  10. 金属质感麦克风_ 学习教程