1、什么是kafka

Kafka 最初由LinkedIn公司开发的,并于 2010 年贡献给了 Apache 基金会,之后成为 Apache 顶级项目。

目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。

目前越来越多的开源分布式处理系统如 Cloudera、 Storm、 Spark、 Flink 等都支持与 Kafka 集成 。

Kafka之所以受到越来越多的青睐,与它所“扮演 ”的三大角色是分不开的 :

  • 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解稿、冗余存储、流量削峰、缓冲、异步通信、扩展性、 可恢复性等功能。与此同时, Kafka 还提供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能

  • 存储系统: Kafka 把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险 。 也正是得益于Kafka 的消息持久化功能和多副本机制,我 们可以把 Kafka 作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置 为“永久”或启用主题的日志压缩功能即可 。

  • 流式处理平台: Kafka 不仅为每个流行的流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理类库,比如窗口、连接、变换和聚合等各类操作 。

2、kafka的应用场景

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

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

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

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

3、Kafka基本知识

一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个ZooKeeper集群,如图所示。 其中 ZooKeeper是 Kafka用来负责集群元数据的管理、控制器的选举等操作的(包括集群 、 broker、主题、 分区等 内容) 。 Producer 将消息发送到 Broker,Broker 负责将收到的消息存储到磁盘中,而Consumer 负责从 Broker 订阅并消费消息。

3.1、Broker(可以理解为消息的服务端)

  • 服务代理节点。对于 Kafka 而言, Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka服务实例;
  • 当消息生产者将消息推送到broker集群中,消费者进行消费;
  • Broker会将节点信息注册到zookeeper中;

3.2、Topic

  • Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的Topic(发送到 Kafka 集群中的每一条消息都要指定一个Topic),而消费者负责订阅Topic并进行消费。
  • Topic是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个Topic,很多时 候也会把分区称为主题分区( Topic-Partition)。同一主题下的不同分区包含的消息是不同的, 分区在存储层面可以看作一个可追加的日志( Log)文件,消息在被追加到分区日志、文件的时候都会分配一个特定的偏移量(offset)。 offset是消息在分区中的唯一标识, Kafka通过它来保证消息在分区内的顺序性,不过offset并不跨越分区,也就是说, Kafka保证的是分区有序而不是主题有序。一个主题可以横跨多个 broker,以此来提供比单个 broker 更强大的性能 。

3.3、Producer

消息生产者,向Broker发送消息的客户端

  • 生产者生产消息持久化机制参数

    • acks=0: 表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。
    • acks=1: 至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入。就可以继续发送下一
    • acks=-1或all: 需要等待 min.insync.replicas(默认为1,推荐配置大于等于2) 这个参数配置的副本个数都成功写入日志,这种策略会保证只要有一个备份存活就不会丢失数据。这是最强的数据保证。一般除非是金融级别,或跟钱打交道的场景才会使用这种配置。
  • retries 消息重试机制,在这种情况下, retries参数的值决定了生产者可以重发消息的次数,如果达到这个次数,生产者会放弃重试并返回错误。默认情况下,生产者会在每次重试之间等待100ms ,可以通过retry.backoff.ms 参数来配置时间间隔。

  • retry.backoff.ms:重试间隔时长

  • buffer.memory:设置发送消息的本地缓冲区,如果设置了该缓冲区,消息会先发送到本地缓冲区,可以提高消息发送性能,默认值是33554432,即32MB

  • batch.size:kafka本地线程会从缓冲区取数据,批量发送到broker,设置批量发送消息的大小,默认值是16384,即16kb,就是说一个batch满了16kb就发送出去

  • linger.ms:默认值是0,意思就是消息必须立即被发送,但这样会影响性能;一般设置10毫秒左右,就是说这个消息发送完后会进入本地的一个batch,如果10毫秒内,这个batch满了16kb就会随batch一起被发送出去;如果10毫秒内,batch没满,那么也必须把消息发送出去,不能让消息的发送延迟时间太长

3.4、Consumer

  • 消息消费者,从Broker读取消息的客户端

  • Kafka 消费端也具备一定的容灾能力。 Consumer 使用拉 (Pull)模式从服务端拉取消息, 并且保存消费的具体位置 , 当消费者宕机后恢复上线时可以根据之前保存的消费位置重新拉取 需要的消息进行消费 ,这样就不会造成消息丢失 。

  • queue模式:所有的consumer都位于同一个consumer group 下。

  • publish-subscribe模式:所有的consumer都有着自己唯一的consumer group

  • auto.offset.reset:当消费主题的是一个新的消费组,或者指定offset的消费方式,offset不存在,那么应该如何消费
    latest(默认) :只消费自己启动之后发送到主题的消息
    earliest:第一次从头开始消费,以后按照消费offset记录继续消费,这个需要区别于consumer.seekToBeginning(每次都从头开始消费)

3.4、ConsumerGroup

每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的Consumer Group消费但是一个 Consumer Group中只能有一个Consumer能够消费该消息

3.5、Partition(分区)

  • 物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的, Kafka保证的是分区有序而不是主题有序

  • Kafka 为分区引入了多副本 (Replica) 机制, 通过增加副本数量可以提升容灾能力。同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是 “一主多从”的关系,其中 leader副本负责处理读写请求, follower副本只负责与 leader副本的 消息同步。副本处于不同的 broker 中 ,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader副本对外提供服务。

进入kafka的bin目录,我是docker安装的在/opt/bitnami/kafka/bin

创建一个topic 设置副本因子3 分区3;其中一zookeeper指定了 Kafka所连接的 ZooKeeper服务地址,–topic指定了所要创建主题的名称, --replication-factor 指定了副本因子, --partitions 指定了分区个数,–create 是创建主题的动作指令

./kafka-topics.sh --create --zookeeper 192.168.0.113:2181 --replication-factor 3 --partitions 3 --topic test

查看topic test;–describe展示主题的更多具体信息

./kafka-topics.sh --describe --zookeeper 192.168.0.113:2181 --topic test


如上图中,test的topic分区数一共有3个,副本数有3个

  • 分区0:Leader副本在broker.id=2的节点上
  • Replicas:副本分别在broker.id=2 4 3 的节点上
  • Isr:保持一定程度同步的副本id

消息会先发送到 leader副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步

什么是kafka、kafka的应用场景、Kafka基本知识相关推荐

  1. kafka应用场景Kafka VS Flume

    前言 最近在搭一个离线Hadoop + 实时SparkStreaming的日志处理系统,然后发现基本上网上的这种系统都集成了kafka. 自己对kafka有一点点的认识,之前看过官网文档,用过一次,就 ...

  2. kafka优势及应用场景

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据.简单地说,Kafka就相比是一个邮箱,生产者是发送邮件的人,消费者是接收邮件的人,Kafka就是用来存东 ...

  3. 【kafka介绍,应用场景及注意事项】

    文章目录 前言 一.kafka是什么? 二.基础知识 核心概念 三.面试问题 kafka中的消息是否会丢失和重复消费 消息发送 消息消费 kafka为什么那么快 消费者提交offset提交的是当前消息 ...

  4. 聊聊 Kafka:Kafka 消息重复的场景以及最佳实践

    一.前言 上一篇我们讲了 聊聊 Kafka:Kafka 消息丢失的场景以及最佳实践,这一篇我们来说一说 Kafka 消息重复的场景以及最佳实践. 我们下面会从以下两个方面来说一下 Kafka 消息重复 ...

  5. 系统间通信方式之(Kafka的实际使用场景和使用方案)(二十三)

    5.场景应用--电商平台:浏览记录收集功能 事件/日志收集系统是大中型软件不得不面对的话题.目前第三方业务系统对 事件/日志收集系统 的集成思路主要有两大类:侵入式收集方案和非侵入式收集方案.侵入式收 ...

  6. Apache Kafka-初体验Kafka(01)-入门整体认识kafka

    文章目录 kafka官方文档 使用场景 Kafka基本概念 消息( Message )相关术语 主题Topic & 消息日志Log 分布式Distribution Producers Cons ...

  7. 转-Kafka【第一篇】Kafka集群搭建

    转自: https://www.cnblogs.com/luotianshuai/p/5206662.html Kafka[第一篇]Kafka集群搭建 Kafka初识 1.Kafka使用背景 在我们大 ...

  8. 【Flink】kafka FlinkKafkaException send data to Kafka old epoch newer producer same transactionalId

    文章目录 1.场景1 1.1 概述 2.场景2 M.参考 1.场景1 1.1 概述 重复问题:[Flink]kafka INVALID_PRODUCER_EPO send data to Kafka ...

  9. 【Flink】kafka INVALID_PRODUCER_EPO send data to Kafka old epoch newer producer same transactionalId

    文章目录 1.场景1 1.1 原因 1.2 解决 1.3 源码 2.类似问题 1.场景1 问题重复:[Flink]kafka FlinkKafkaException send data to Kafk ...

  10. kafka实战教程(python操作kafka),kafka配置文件详解

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是否容忍重复?消息的吞吐量 ...

最新文章

  1. 使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!
  2. python遍历循环选择题_19道Python循环遍历,while,for语句测试题,网上看到的题目,自己不看答案全部做了一次,总共3个小时左右...
  3. Eddy的难题_JAVA
  4. java parameters用法_(四)Parameters,简单参数就用这个
  5. boost::smart_ptr模块boost/pointer_cast.hpp 的测试
  6. Centos7 Minimal 版安装后安装图形界面教程
  7. 关于OAuth 协议中刷新令牌存活时间的讨论
  8. LQ训练营(C++)学习笔记_常见动态规划模型
  9. lol最克制诺手的英雄_LOL:哪些英雄之间非常克制,不管怎么打,遇到就输了?...
  10. 滴滴新规则明日起试行:将影响一大波人
  11. Android中BitmapFactory.Options详解
  12. jsp页面ajax用法,JSP页面如何使用ajax实现局部刷新
  13. JDBC中给Mysql加时区问题!
  14. 如何在恢复模式下重新启动Mac?
  15. C# Dictionary 的几种遍历方法
  16. pscc2019滤镜抽出_ps抽出滤镜(Extractplus.8bf)下载_ps抽出滤镜(Extractplus.8bf)官方下载-太平洋下载中心...
  17. 弹出确认提示框,确定,取消
  18. 零基础学爬虫大概多久?
  19. 制作U盘启动CDLinux
  20. c语言程序设计周记,C语言学习日记

热门文章

  1. C# 将本地图片插入到Excel文件中
  2. Windows下通过scp下载Linux服务器文件
  3. 金额转中文大写源代码(原创)
  4. 故障管理:故障应急和故障复盘
  5. mysql在php中存储过程写法
  6. qq消息列表整合上下拉刷新和拖拽删除
  7. JavaScript延时动画
  8. Python运算符及用法(超级详细)
  9. 杰理-AC632X系列之电池电压检测时间
  10. php开发之微信支付(扫码支付)