消息队列之Kafka详解

kelly 等级 734 0 1

消息队列之Kafka详解


1. 什么是Kafka

在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

  1. Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
  2. Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
  3. Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
  4. 无论是kafka集群,还是consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。新版本的offset维护在本地

2. Kafka架构

  1. Producer :消息生产者,就是向kafka broker发消息的客户端;
  2. Consumer :消息消费者,向kafka broker取消息的客户端;
  3. Topic :可以理解为一个队列;
  4. Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic;
  5. Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic;
  6. Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序;
  7. Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。
  8. broker和consumer依赖zookeeper,而producer不和zookeeper进行通信

zookeeper 可以连接fllower 更新操作回到leader上去做fllower进行交互.

Zookeeper的作用及背景【数据一致性、高可用】

管理代码中的变量的配置
设置命名服务
提升系统的可用性和安全性
管理Kafaka集群 


3. 基本概念

了解代理、生产者、消费者、消费者组等概念

  1. Broker(代理)
  2. Producer(生产者)
    在Kafka系统中,写入数据的应用一般被称为 “生产者” 。
    Kafka生产者可以理解成Kafka系统与外界进行数据交互的应用接口。
  3. Consumer(消费者)
  4. Comsumer Group(消费者组)

明白主题、分区、副本、记录在kafka中所代表的含义

  1. Topic(主题)
  2. Partition(分区)
  3. Replication(副本)
  4. Record(记录)

  1. Kafka的设计初衷?
    高吞吐量、高可用队列、低延时、分布式机制
  2. Kafka的特性是什么?
    高吞吐量、高可用队列、低延时、分布式机制
  3. Kafka使用于哪些场景?
    异步产生数据、偏移量迁移、安全机制、连接器、机架感知、数据流、时间戳、消息语义、日志收集、消息系统、用户轨迹、记录运营监控数据、实现流处理、事件源
  4. Kafka有哪些元数据信息存储在zookeeper?
    控制器选举次数、代理节点和主题、配置、管理员操作、控制器。
  5. 这些元数据信息是如何分布的?
    消息队列之Kafka详解
  6. 为什么需要消费者组?
    水平程序拓展,放置信息堆积

4. 分区存储

4.1. 分区存储数据

分区文件存储

  • 一个主题下包含多个分区,每个分区为单独目录
  • 分区命名规则为主题+有序序号 从零开始 到分区n-1

片段文件存储

  • 由索引文件和数据文件组成 *.index索引文件 .log 数据文件
  • Kafka并不是给每条消息记录建立索引,而是采用稀疏索引方式

4.2. Kafka清理过期数据有哪些方法

基于时间和大小的删除策略

#系统默认保存7天
log.retention.hours=168

#系统默认没有设置大小
log.retention.bytes=-1 

压缩策略清除

如果使用压缩策略清除过期日志,则需要设置属性
log.cleanup.policy=compact 

5. Kafka安全机制

5.1. 了解Kafka安全机制

0.9版本前无安全机制存在 泄露敏感数据,删除主题,修改分区等风险

身份认证

1.客户端和Kafka Broker之间连接认证
2.Broker和Broker之间连接认证
3.Broker和Zookeeper之间连接认证 

权限控制

1. 对读写删改主题权限控制
2. 可插拔权限认证,支持与外部授权服务集成
3. 自带简单的授权类kafka.secutity.auth.SimpleAclAuthorizer
4. 部署安全模块是可选的 

5.2. 配置ACL

集群操作
倾向于集群内部代理节点之间的管理,例如代理节点升级、主题分区元数据Leader切换、主题分区副本设置等

主题操作
针对具体的访问权限,例如对主题的读取、删除、查看等

#如果没有设置ACL、则除超级用户外其他用户不能访问。默认为false
allow.everyone.if.no.acl.found=true
#设置超级用户
super.users=User.admin
#启用ACL,配置授权
authorizer.class.name=kafka.secutity.auth.SimpleAclAuthorizer 

5.3. Kafka启用ACL模式

集群启动

# 文件/**/reader_jaas.conf权限认证信息内容

KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin"
  user_admin="admin"
  user_reader="reader"
  user_writer="writer";
};

#在 zookeeper-server-start.sh kafka-server-start.sh cat kafka-acls.sh脚本中添加
export KAFKA_OPTS="-Djava.security.auth.login.config=/**/reader_jaas.conf"

# 启动zookeeper
./zookeeper-server-start.sh ../config/zookeeper.properties 1>/dev/null 2>&1 &

# 启动Kafka
nohup ./kafka-server-start.sh ../config/server.properties > kafka-server-start.log 2>&1 & 

查看权限

kafka-acls.sh 

6. Kafka连接器

连接器核心概念

  1. 连接器实例
  2. 任务数
  3. 事件线程
  4. 转换器

6.1. 了解连接器使用场景

连接器一般是用来构建数据管道
1.开始和结束的端点 [举例 Kafka数据移出到hbase 或者oracle数据移入到Kafka]
2.数据传输的中间介质[举例 海量数据存储到ES中,作为临时存储] 

6.2. 特性和优势

特性

  1. 通用的框架
  2. 单机模式和分布式模式
  3. REST接口
  4. 自动管理偏移量
  5. 分布式和可扩展
  6. 数据流和批量集成

优势

  1. Source连接器
  2. Sink连接器

6.3. 操作Kafka连接器

单机模式将数据导入Kafka

第一步:创建要导入的文件
第一步:修改配置文件../config/connect-file-source.properties 

./connect-standalone.sh  ../config/connect-standalone.properties ../config/connect-file-source.properties 

分布式模式将数据导入Kafka

./connect-distributed.sh ../config/connect-distributed.properties 

#查看版本号
curl http://dns:8083 

6.4. 开发一个简易Kafka连接器插件

编写Source连接器

1.SourceConnector类:用来初始化连接器配置和任务数
2.SourceTask类:用来实现标准输入或者文件读取 

编写Sink连接器

1.SinkTask类:用来实现标准输出或者文件写入
2.SinkConnector类:用来初始化连接器配置和任务数 

参考资料:
Kafka监控系统 — Kafka Eagle
Centos下kafka 单机配置部署详解
kafka安装部署
Kafka安装教程(详细过程)
apache kafka系列之server.properties配置文件参数说明
Kafka监控系统Kafka Eagle剖析
Kafka集群部署(Docker容器的方式)

本文转自 https://blog.csdn.net/baidu_41847368/article/details/114764613?utm_medium=distribute.pc_category.none-task-blog-hot-8.nonecase&dist_request_id=1328642.42289.16157317109702379&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-8.nonecase,如有侵权,请联系删除。

收藏
评论区

相关推荐

消息队列之Kafka详解
消息队列之Kafka详解 1\. 什么是Kafka(about:blank1_Kafka_4) 2\. Kafka架构(about:blank2_Kafka_15) (about:blank_37) 3\. 基本概念(about:blank3__40) 4\. 分区存储(about:blank4
Kafka Consumer端的一些解惑
最近一直忙着各种设计和文档,终于有时间来更新一点儿关于kafka的东西。之前有一篇文章讲述的是kafka Producer端的程序,也就是日志的生产者,这部分比较容易理解,业务系统将运行日志或者业务日志发送到broker中,由broker代为存储。那讲的是如何收集日志,今天要写的是如何获取日志,然后再做相关的处理。 之前写过kafka是讲日志按照topic
Kafka 中两个重要概念:主题与分区
在 Kafka 中还有两个特别重要的概念—主题(Topic)与分区(Partition)。Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。这里补充了对[**Kafka基本概念**](https://www.oschina.net/action
Kafka 原理详解
#### Kafka 原理详解 ##### 1 kakfa基础概念说明 * Broker:消息服务器,就是我们部署的一个kafka服务 * Partition:消息的水平分区,一个Topic可以有多个分区,这样实现了消息的无限量存储 * Replica:消息的副本,即备份消息,存储在其他的broker上,当leader挂掉
Kafka 常用脚本与配置
脚本 作用 kafka-server-start.sh kafka启动 kafka-server-stop.sh kafka停止 kafka-topics.sh 查看创建删除topic kafka-console-consumer.sh 消费者操作,例如监听topic kafka-console-producer.sh 生产者操作,例如
Kafka 自定义指定消息partition策略规则及DefaultPartitioner源码分析
Kafka 自定义指定消息partition策略规则及DefaultPartitioner源码分析 ================================================= 一.概述 ---- kafka默认使用DefaultPartitioner类作为默认的partition策略规则,具体默认设置是在ProducerConfi
Kafka(3)
### 消息的存储原理: ####   消息的文件存储机制:   前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式。通过       \[root@localhost ~\]# ls /tmp/kafka-logs/firstTopic-1/命令找到对应 partition 下的日志内容
Kafka之Producer生产者分区
    kafka-client的版本:0.10     有个很重要的类Partitioner     _List-1_ public interface Partitioner extends Configurable { /** * Compute the partition for the gi
Kafka常用命令
Kafka命令行工具 ========== 1. 查看Kafka现有的Topic 1 bin/kafka-topics.sh --zookeeper localhost:2181 --list 2. 查看Topic详情 1 bin/kafka-topics.sh --zo
Kafka常用操作
Kafka的版本间差异较大,下面是0.8.1的操作方法 首先cd到kafaka的bin目录下,操作kafka的工具都在这里呢。如果发现找不到,或者名字不对,说明kafka版本不对。 以topic是test为例子 --zookeeper 后的ip改成你们自己的 创建topic ./kafka-topics.sh --topic test --create
Kafka监控工具kafka
**Kafka Monitor**为Kafka的可视化管理与监控工具,为Kafka的稳定运维提供高效、可靠、稳定的保障,这里主要简单介绍Kafka Monitor的相关功能与页面的介绍;   Kafka Monitor v0.1 主要功能有:**Kafka基本信息仪表盘、broker列表、topic列表、当前消费者列表、Topic添加删除、Topic数据
Kafka设计解析(三):Kafka High Availability (下)
本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover、Controller failover、Topic创建/删除、Broker启动、Follower从Leader fetch数据等详细处理过程。同时介绍了Kafka提供的与Replication相关的工具,如重新分配Partition等。
Pulsar与Kafka消费模型对比
**kafka** --------- kafka 属于 Stream 的消费模型,为了支持多 partition 的消费关系,引入了 consumer group 的概念,同时支持在消费端动态的 reblance 操作,当多个 Consumer 订阅了同一个 Topic 时,会根据分区策略进行消费者订阅分区的重分配。只要 consumer-group 与
Storm结合kafka参数配置详解+代码示例(累计单词出现的次数)
kafka参数配置详情: public final BrokerHosts hosts;//设置kafka从哪里获取相关的配置信息 public final String topic;//从哪个topic开始消费 public final String clientId;//设置客户端标识 public int fetchSizeBytes = 10
springboot+kafka集成
kafka概念   Topic:消息根据Topic进行归类,可以理解为一个队里。   Producer:消息生产者,就是向kafka broker发消息的客户端。   Consumer:消息消费者,向kafka broker取消息的客户端。   broker:每个kafka实例(server),一台kafka服务器就是一个broker,一个集群

热门文章

Ngnix入门教程iris-session梳理磁盘读写与数据库的关系

最新文章

磁盘读写与数据库的关系iris-session梳理Ngnix入门教程