Kafka 相关技术应用

Kafka

简介:

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

 

Kafka 基本概念:

producer:消息和数据的生产者,向kafka的一个topic发布消息的进程/代码/服务

consumer:消息和数据的订阅者,订阅数据(topic)并且处理起发布的消息的进程/代码/服务

Consumer Group:逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息

Broker:物理概念,kafka集群中的每个kafka节点

Topic:逻辑概念,Kafka消息的类别,对数据进行区分,隔离

partition:物理概念,kafka下存储的基本单元,一个topic可以存多个partition,partition是有序的

 

Replication: 同一个Partition 可能会有Replica,多个Replica之间数据一样的

Replication Leader:一个Partition的多个 Replica上,需要一个leader负责该Partition上与Producer和 Consumer交互

ReplicaManager:负责管理当前broken 所分区和副本的信息,处理KafkaController发起一些请求,副本状态的却换 添加/读取信息等

-----扩展

Partition 

 1.每一个Topic被切分为多个Partitions

partition属于消息存储的基本单位。topic就像分类,一个分类下有多个单位(partition)。

2.消费者数据少于或等于Partition的数目

3.Broker Group 中的每一个Broker保存Topic的一个或多个Partitions

4.Consumer Group 中的仅有一个Consumer读取Topic的一个或者多个Partitions,并且是唯一的Consumer

//broker 是kafaka的一个存储节点。多个节点组成一个Broker Group

 

Replication

1.当集群中有broker 挂掉的情况,系统可以主动的使用Replicas提供服务

2.系统m默认设置每一个Topic的replication系数为1,可以在创建Topic是单独设置

 

Replication特点

1.replication的基本单位是Topic的Partition

2.所有的读和写都从Leader进,Follwers只是作为备份

3.Follower必须能够及时复制Leader的数据

4.增加容错性与可扩展性

 

Kafka消息结构

 OfferSet:记录消息的偏移量

 Length:记录的是整条消息的长度

 CRC32:校验字段,校验信息的完整性

 Magic:特定数字,判断数据是否属于Kafka,不属于就直接丢弃

 attributes:(可选)记录的是数据的多个属性,是一个枚举值

Kafka的特点:分布式

    (1)多分区

    (2)多副本

    (3)多订阅者

    (4)基于ZooKeeper调度

Kafka的特点:高性能

1.高吞吐量 ;2.低延迟;3.高并发;4.时间复杂度o(1)

Kafka的特点:持久化与扩展性

1.数据可持久化;2 容错性;3.支持在线水平扩展;4.消息自动平衡

Kafka 应用场景

消息队列、行为跟踪、元信息监控(运维性质)、日志收集、流处理、事件源、持久性日志(commit log)

 

kafka 的简单案例

 

1.zookeeper

2.启动 kafka

.\bin\windows\kafka-server-start.bat .\config\server.properties

3. 创建 topic (test ) 他有一个分区和一个副本:

.\bin\kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

4. 现在我们可以运行List(列表)命令来查看这个Topic:

 .\bin\kafka-topics.sh --list --zookeeper localhost:2181 test

5.

 

 

kafka 消息事务

数据传输的事务定义

1.最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输

2.最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输

3.精确一次(Exactly once):不会漏传输也不会重复传输,每个消息 都被传输一次而且仅仅被传输一次,这是大家所期望的

事务保证:

内部重试问题:Procedure 幂等处理

多分区原子写入

 

零拷贝 简介 场景:网络传输持久化日志块(消费的消息是日志块),本身很消耗性能 java:Nio chanel transforTo()方法 linux:sendfile系统调用

 

零拷贝过程

◆操作系统将数据从磁盘读入到内核空间的页缓存

◆将数据的位置和长度的信息的描述符增加至内核空间(socket缓冲区)

◆操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出

 

 

文件传输到网络的公共数据路径

◆操作系统将数据从磁盘读入到内核空间的页缓存

◆应用程序将数据从内核空间读入到用户空间缓存中

◆应用程序将数据写回到内核空间到socket缓存中

◆操作系统将数据从socket缓冲区复制到网卡缓冲区,以便将数据经网络发出

有关kafka的一些下载以及测试 ,我推荐我一哥们的博客地址:

https://blog.csdn.net/qq_35175995/article/details/100670812

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值