IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Kafka入门简介 -> 正文阅读

[大数据]Kafka入门简介

Kafka结构

结构图示

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Kafka优点

1.可以无缝的支持多个生产者,不管客户端在使用单个主题还是多个主题。所以它很适合从多个前端系统收集数据,并以统一的格式对外提供数据。
2.支持多个消费者从消息流上读取数据,而且消费者之间互不影响。
3.基于磁盘的数据存储允许消费者非实时的读取消息。
4.具有灵活的伸缩性,可以先使用单个broker,再逐渐扩大。
总结:解除了生产者和消费者的耦合,通过基于磁盘的数据存储允许消费者非实时的读取消息,且broker可灵活拓展,这些特性使Kafka可以轻松的处理巨大的信息流,同时保证亚秒级的消息延迟。

broker部分

在这里插入图片描述

Zookeeper配置

Zookeeper配置中列出的地址格式遵循servier.X=hostname:peerPort:leaderPort的格式
hostname:服务器主机名或IP地址
peerPort:用于节点间通信的TCP端口
leaderPort:用于首领选举的TCP端口

broker和Zookeeper的连接

可以有多个Kafka集群连接一个Zookeeper群组
broker通过设置zookeeper.connect与Zookeeper连接,格式为hostname:post/path
hostname:Zookeeper服务器的主机名或IP地址
post:Zookeeper的客户连接端口
path:可选的Zookeeper路径,作为Kafka集群的chroot环境

broker配置

broker通过log.dir设置日志存放目录和分区,通过可配置的线程池处理日志片段,当添加新的broker到集群中时,只需修改zookeeper.connect和broker.id两个配置参数
此外,有多个参数用于设置broker关闭文件的存储大小、时间和删除文件的存储大小、时间
(有关系统调优和硬件配置详见《Kafka权威指南》第二章)

tips:

集群的好处:

  • 负载均衡
  • 通过复制来避免单点故障造成的数据丢失和吞吐量低造成的性能问题

向Kafka写入数据

过程图示

在这里插入图片描述

生产者

生产者配置

三个必有属性:

  • bootstrap.servers,格式为host:port,通过给定的broker可以找到其他的broker信息,但至少提供两个broker信息,以防其中一个宕机
  • key.serializer,提供类将键对象序列化成字节数组
  • value.serializer,将值序列化

代码示例:

private Properties kafkaProps = new Properties();
kafkaProps.put("bootstrap.servers","broker1:9002,broker2:9092);
kafkaProps.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
kafkaProps.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
producer=new KafkaProducer<String, String>(kafkaProps);

发送消息的三种方式

  • 发送并忘记
    不关心消息是否正常到达,有时候会丢失一些消息
ProducerRecord<String,String> record=new ProducerRecord<>("CustomerCountry","Precision Products","France");
try{
  producer.send(record);
}catch(Exception e){
      e.printStackTrace();
}
  • 同步发送
    用send()方法发送消息,返回一个Future对象,调用get()方法进行等待以知道是否发送成功
ProducerRecord<String,String> record=new ProducerRecord<>("CustomerCountry","Precision Products","France");
try{
  producer.send(record).get();
}catch(Exception e){
      e.printStackTrace();
}
  • 异步发送
    调用sent()方法,并指定一个回调函数,服务器在返回响应时调用该函数
private class DemoProducerCallback implements Callback{
        @Override
    public void onCompletion(RecordMetadaata recordMetadata,Exception e){
    if(e!=null){
    e.printStackTrace();
    }
    }
}
ProducerRecord<String,String> record=new ProducerRecord<>("CustomerCountry","Precision Products","France");
producer.send(record,new DemoProducerCallback());

序列化器

用于将生产者发送的对象转化为字节数组
例:JOSN、Avro、Thrift、Protobuf

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:59:21  更:2021-07-17 12:00:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:43:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码