kafka初体验(二)

kafka的数据单元称为消息,消息是由字节数组组成。

:字节数组,决定消息写入哪个分区

消息分批次传输可以减少网络开销。批次越大单位时间内处理的消息越多,单个消息的传输时间越长。

将批次数据压缩可以提升数据的传输和存储能力,但要做更多的计算处理。

kafka消息按主题进行分类。每个主题分为若干个分区。消息以追加的形式写入分区。以先入先出的顺序读取。(由于一个主题有多个分区,所以无法保证主题分为内消息有序,但可以保证单个分区内消息有序)。

分区可以分布在多个服务器上。不可再细分存储。

消费者通过检查消息的偏移量来区分已经读取过的消息。在给定的分区中,偏移量是唯一的。

消费者是消费者群组的一部分。群组保证每个分区只被一个消费者使用(一个或多个消费者共同读取一个主题)。

一台独立的kafka服务器被称为broker,broker是集群的组成部分,每个集群都有一个broker同时充当了集群控制器的角色。

保留消息:可以保留一段时间;保留消息到一定的字节数。当达到上限,数据就会过期并被删除

最好使用多集群的原因

1)数据类型分离;2)安全需求隔离;3)多数据中心(灾难恢复)

MirrorMaker可以实现集群间的消息复制。核心组件包含了一个生产者和一个消费者,通过队列相连。

为什么选择kafka?

1)多个生产者

       kafka可以无缝的支持多个生产者,不管客户端在使用单个主题还是多个主题,所以很适合从多个

       前端系统收集数据,并以统一的格式对外提供数据。

2)多个消费者

      kafka支持多个消费者从一个单独的消息流上读取数据,消费者之间互不影响。多个消费者组成一个群组,

     共享一个消息流,保证整个群组对给定的消息流只处理一次。

3)基于磁盘的数据存储

    消息被提交到磁盘,保证数据不会丢失

4)伸缩性

   方便横向扩展而不影响整体系统的可用性。复制功能提高了系统的容错能力

5)高性能

  可以横向扩展生产者、消费者、broker,保证亚秒级消息延迟。

kafka写入消息过程

   创建一个ProducerRecord对象(包括目标主题,要发送的内容,指定键或分区),在发送该对象前,生产者需要先把键和值对象序列化成字节数组;数据被传送给分区器,选好分区后数据就知道往哪个主题和分区发送这条信息;这天信息被添加到一个批次里(该批次数据被发送之前保存在缓冲区中),由一个独立的线程把这批信息发送到相应的broker上;服务器收到消息后返回一个响应,成功返回RecordMetaData对象。失败则返回一个错误,收到错误会重试几次仍失败则返回错误信息。

自定义序列化器:实现Serializer<>接口

自定义分区器:实现Partitioner接口

kafka读取数据

再均衡:分区所有权从一个分区转移到另一个分区。再均衡为消费者群组带来了高可用和伸缩性(可以放心的添加或删除消费者)

同一个群组中一个消费者使用一个线程

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值