1.1 什么是kafka?

Kafka最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。随着kafka的发展,功能并不局限于消息系统。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer。kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

1.2 Kafka的特性:

- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

- 可扩展性:kafka集群支持热扩展

- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

- 高并发:支持数千个客户端同时读写

1.3 Kafka适用场景

由于 Kafka存在高容错、高扩展、扩展分布式等特性, Kafka主要应用场景如下:

日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

消息系统:解耦和生产者和消费者、缓存消息等。

用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

流式处理:比如spark streaming和storm

1.4 Kafka中的相关概念

Kafka中发布订阅的对象是topic。可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。

Broker(代理者 ):Kafka集群中的机器 /服务被称为broker, 是一个物理概念。一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。注意:一台节点上可以有多个broker,这和HDFS上一个节点是一个namenode或者datanode有所区别。一台机器上的broker数量由server.properties的数量决定。

Topic:一类消息,消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。一个broker可以容纳多个topic。

Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。在数据的 产生和消费过程中,不需要关注具体存储的Partition在哪个Broker上,只需要指定 Topic 即可,由 KafkaKafka Kafka负责将数据和对应的 Partition关联上

Segment:partition物理上由多个segment组成,每个Segment存着message信息

Message (消息 ):传递的数据对象,主要由四部分构成(offset(偏移量 )、key、value、 timestamp(插入时间 )

消息和数据不是一个概念,消息是对数据的封装,其中的value部分是可以看成是数据。

Producer : 生产message发送到topic

Consumer : 订阅topic消费message, consumer作为一个线程来消费

Consumer Group:一个Consumer Group包含多个consumer, 这个是预先在配置文件中配置好的。各个consumer(consumer 线程)可以组成一个组(Consumer group ),partition中的每个message只能被组(Consumer group ) 中的一个consumer(consumer 线程 )消费,如果一个message可以被多个consumer(consumer 线程 ) 消费的话,那么这些consumer必须在不同的组。Kafka不支持一个partition中的message由两个或两个以上的consumer thread来处理,即便是来自不同的consumer group的也不行。它不能像AMQ那样可以多个BET作为consumer去处理message,这是因为多个BET去消费一个Queue中的数据的时候,由于要保证不能多个线程拿同一条message,所以就需要行级别悲观锁(for update),这就导致了consume的性能下降,吞吐量不够。而kafka为了保证吞吐量,只允许一个consumer线程去访问一个partition。如果觉得效率不高的时候,可以加partition的数量来横向扩展,那么再加新的consumer thread去消费。这样没有锁竞争,充分发挥了横向的扩展性,吞吐量极高。这也就形成了分布式消费的概念。

1.4 Kafka的拓扑图:

Kafka是显示的分布式消息发布和订阅系统,除了有多个producer, broker,consumer外,还有一个zookeeper集群用于管理producer,broker和consumer之间的协同调用。

从图中可以看出,一个典型的Kafka集群中包含若干Producer(可以是web前端产生的PageView,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

Producer到Broker的过程是push,也就是有数据就推送到Broker,Consumer到Broker的过程是pull,是通过Consumer主动去拉数据的,而不是Broker把数据主动发送到Consumer端的。

1.5 Kafka安装部署及测试

Kafka的开发语言为 Scala。提供了各种不同语言的 API API。 Kafka的安装方式主要由三种,分别是:单机、伪分布式、完全分布式;其中伪分布式和完全分布式几乎完全一样。

安装步骤:

  1. 安装 JAVA和Scala
  2. 安装 Zookeeper
  3. 安装 Kafka

Kafka安装 (伪分布式 )

解压

$ tar -zxf kafka_2.11-2.0.0.tgz

配置

修改配置文件 {KAFKA_HOME}/conf/server.properties。如果是伪分布式,那么需要在单台机器上 copy多个 server.properties文件;如果是完全分布式,那么需要将修改好的 KAFKA 完全copy到其它机器上。

${KAFKA_HOME}/config/server.properties
port=9092
host.name=haotnameadvertised.host.name=haotnameadvertised.port=9092
​
zookeeper.connect=hostname:2181

单节点多broker,就应该将上面的这个server.properties,复制几份出来

 cp config/server.properties config/server1.propertiescp config/server.properties config/server2.properties$ mv config/server.properties config/server0.properties
​
修改${KAFKA_HOME}/config/server1.properties
broker.id=1
listeners=PLAINTEXT://:9093
port=9093
log.dirs=/usr/local/kafka_2.11-0.9.0.1/data/log1
// 因为是同一节点上开启了多个broker,所以只能通过端口区分,若是broker都在不同的节点上,不用通过端口区分

启动测试 1.启动zookeeper

$ bin/zkServer.sh start

查看是否正常

$ bin/zkServer.sh status

2.启动kafaka的broker进程

$bin/kafka-server-start.sh -daemon config/server0.properties

关闭服务使用

{KAFKA_HOME}/bin/kafka-server serverserver -stop.sh

kudu接受kafka消息_Kafka入门详解相关推荐

  1. kudu接受kafka消息_Kafka 在车好多

    在 2016 年中旬,车好多集团(瓜子二手车&毛豆新车)开始引入 Kafka 技术栈,起初的目标是作为大数据系统的数据输入,随着使用范围的推广,逐步成为集团数据链路的核心组件. Kafka 在 ...

  2. php kafka耗时长,Kafka消息过长详解

    Kafka发送消息大小问题 ⚠️ 本文实验的Kafka版本为2.11版本. 消息概述 kafka中的消息指的就是一条ProducerRecord,里面除了携带发送的数据之外,还包含: topic 发往 ...

  3. 消息队列超详解(以RabbitMQ和Kafka为例,为何使用消息队列、优缺点、高可用性、问题解决)

    消息队列超详解(以RabbitMQ和Kafka为例) 为什么要用消息队列这个东西? 先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦.异步.削峰. 解耦:现场画个图来说明一 ...

  4. FFmpeg入门详解之83:流媒体与直播技术

    流媒体 流媒体又叫流式媒体,它是指商家用一个视频传送服务器(比如:vlc)把节目(比如:ande10.mp4)当成数据包发出,传送到网络上.用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显 ...

  5. Web 实时消息推送详解

    title: Web 实时消息推送详解 category: 系统设计 head: meta name: keywords content: 消息推送,短轮询,长轮询,SSE,Websocket,MQT ...

  6. FFmpeg入门详解之84:RTSP协议讲解

    RTSP亲手搭建直播点播 测试工具:VLC 数据源:  文件或本地摄像头 测试功能:RTSP直播点播 播放地址:rtsp://127.0.0.1:8554/rtspa001 服务端:推流 客户端:拉流 ...

  7. DELPHI 中 Window 消息大全使用详解

    Window 消息大全使用详解 导读: Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能 ...

  8. FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览

    Qt5+FFmpeg单路网络摄像头采集预览 源码工程:S26_Test4 RTSP协议简介 RTSP(Real Time Streaming Protocol),RFC2326 RTSP(Real T ...

  9. Jetpack Compose入门详解(实时更新)

    Jetpack Compose入门详解 前排提醒 前言(Compose是什么) 1.实战准备 一.优势与缺点 二.前四课 三.标准布局组件 1.Column 2.Row 3.Box 四.xml和com ...

最新文章

  1. 【JDBC 报错】Connections could not be acquired from the underlying database!
  2. CVPR 2020:华为GhostNet,超越谷歌MobileNet,已开源
  3. Hinton最新访谈:GPT-3和人脑比参数量仍少1000倍
  4. 棋盘上的孙子兵法之我见
  5. 程序内存区域分配(五个段)--终于搞明白了
  6. 点云处理库pyntcloud
  7. 神经网络与机器学习 笔记—多层感知器(MLP)
  8. 【机器学习PAI实践十二】机器学习实现男女声音识别分类(含语音特征提取数据和代码)
  9. python plot函数label_python – Matplotlib Contour Clabel位置
  10. 【学步者日记】UnityEditor扩展菜单以及ScriptableObject
  11. 手推机器学习公式(一) —— BP 反向传播算法
  12. 形式验证进阶 chipdriver_【饥荒进阶】烹饪基础:全食材系数详解-五耀整理
  13. 隐藏Windows Live Messenger到系统图标栏
  14. (转)一个由自由职业者建立的量化对冲基金
  15. python学习笔记(3)---cookie session
  16. Oracle函数返回Table集合
  17. c语言实现 三角函数,关于数学:快速实现C ++三角函数
  18. PyTorch笔记 - Dropout: A Simple Way to Prevent Neural Networks from Overfitting
  19. Java入门教程笔记07(面向对象基础)
  20. FIIL、南卡、漫步者蓝牙耳机怎么选?国产半入耳蓝牙耳机推荐

热门文章

  1. 【案例分析】android广播接收不到原因分析
  2. 博客已经迁移至 http://barretlee.com/entry/,时而同步分享到这里
  3. struts1.2上传多个文件
  4. 菜鸟学python 哪吒_Python 学习之路 (前言)
  5. java jar 配置_java jar包与配置文件的写法
  6. linux nfs acl 特定ip,技术|RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享...
  7. mysql错误代码1045的解决方案_mysql错误代码1045的解决方案
  8. linux vim编辑器主要作用,Linux-vim编辑器
  9. MySQL怎么导入webcontent_把网页信息添加到mysql,在MyEclipse运行Tomcat出现下面的错误,弄不明白,求助怎么解决呀...
  10. 设置窗口大小后无法滚动_新款奥迪A6L更换变速器机电单元后无法完成油冷却阀基本设置...