Kafka原理以及SpringBoot整合Kafka
1.Kafka原理
1. brokers有多个broker组成,broker是指Kafka服务器(192.168.223.140就是其中的一个broker),上面三台Kafka服务器组成了Kafka集群
2. broker.id代表集群中broker的唯一性,不能重复
3. partions主题分区数。kafka通过分区策略,将不同的分区分配在一个集群中的broker上,一般会分散在不同的broker上,当只有一个broker时,所有的分区就只分配到该Broker上。消息会通过负载均衡发布到不同的分区上,消费者会监测偏移量来获取哪个分区有新数据,从而从该分区上拉取消息数据。分区数越多,在一定程度上会提升消息处理的吞吐量,因为kafka是基于文件进行读写,因此也需要打开更多的文件句柄,也会增加一定的性能开销。如果分区过多,那么日志分段也会很多,写的时候由于是批量写,其实就会变成随机写了,随机 I/O 这个时候对性能影响很大。所以一般来说 Kafka 不能有太多的 Partition。
4.topics主题。topics可以看作是整个集群的容器,topic看作是里面其中一个小容器,然后这些topic容器组成了topics容器。所有操作都在一个单独的topic里面操作,可以看成像docker一样
5.创建主题
bin/kafka-topics.sh --create --zookeeper 192.168.223.142:2181 --replication-factor 1 --partitions 3 --topic mytest
5.1replication-factor:用来设置主题的副本数。每个主题可以有多个副本,副本位于集群中不同的broker上,也就是说副本的数量不能超过broker的数量,否则创建主题时会失败。
replication-factor 设置为2时,代表主题的副本数为2,如下图所示,0,1,2里面有192.168.223.140,192.168.223.141,192.168.223.142单个总的数量都为2,比如2挂掉,0,1,里面也保存了整个集群信息,通过去重,得到了整个集群信息(192.168.223.140,192.168.223.141,192.168.223.142 )
5.2partitions主题分区数为3,默认是采用轮训算法,也就是mytest主题,均匀分区在(192.168.223.140,192.168.223.141,192.168.223.142 )上面,SpringBoot整合Kafka的时候会验证这一点
6.Zookeeper角度理解Kafka原理
任意连接其中一个zookeeper节点,主题mytest三个分区,test一个分区
上图看到,topics下面管理着所有主题,包括mytest、test、test1等等,mytest被均匀分区成了(0,1,2),对应分区下面存储相关信息,test只有1个分区0。
2.SpringBoot整合Kafka
2.1 导入依赖
<!-- springBoot集成kafka --><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency>
2.2 相关配置
# kafka
spring:kafka:# kafka服务器地址(可以多个)bootstrap-servers: 192.168.223.140:9092,192.168.223.141:9092,192.168.223.142:9092consumer:# 指定一个默认的组名group-id: kafka2# earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费# latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据# none:topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常auto-offset-reset: earliest# key/value的反序列化key-deserializer: org.apache.kafka.common.serialization.StringDeserializervalue-deserializer: org.apache.kafka.common.serialization.StringDeserializerproducer:# key/value的序列化key-serializer: org.apache.kafka.common.serialization.StringSerializervalue-serializer: org.apache.kafka.common.serialization.StringSerializer# 批量抓取batch-size: 65536# 缓存容量buffer-memory: 524288# 服务器地址bootstrap-servers: 192.168.223.140:9092,192.168.223.141:9092,192.168.223.142:9092
2.3 代码实现
@RestController
@SpringBootApplication
public class KafkaController {/*** 注入kafkaTemplate*/@Autowiredprivate KafkaTemplate<String, String> kafkaTemplate;/*** 发送消息的方法** @param key* 推送数据的key* @param data* 推送数据的data*/private void send(String key, String data) {// topic 名称 key data 消息数据kafkaTemplate.send("mytest", key, data);}// test 主题 1 my_test 3@RequestMapping("/kafka")public String testKafka() {int iMax = 10;for (int i = 1; i < iMax; i++) {send("key" + i, "value" + i);}return "success";}public static void main(String[] args) {SpringApplication.run(KafkaController.class, args);}/*** 消费者使用日志打印消息*/@KafkaListener(topics = "mytest")public void receive(ConsumerRecord<?, ?> consumer) {System.out.println("topic名称:" + consumer.topic() + ",key:" + consumer.key() + ",value:" + consumer.value() +",分区位置:" + consumer.partition()+ ", 下标" + consumer.offset());}}
2.4 验证输出
Kafka原理以及SpringBoot整合Kafka相关推荐
- kafka 安装使用 /springboot整合kafka /消息投递机制以及存储策略 /副本处理机制
一.背景 1.基本信息 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流 ...
- SpringBoot整合kafka(实现producer和consumer)
转载自 SpringBoot整合kafka(实现producer和consumer) 在Windows环境下安装运行Kafka:https://www.jianshu.com/p/d64798e81f ...
- springboot 整合 kafka demo 顺便看一下源码
大家好,我是烤鸭: 今天分享下 springboot 整合 kafka. 1. 环境参数: windows + kafka_2.11-2.3.0 + zookeeper-3.5.6 + spring ...
- SpringBoot整合kafka之kafka分区实战
本文来说下SpringBoot整合kafka之kafka分区实战 文章目录 准备工作 程序代码 程序测试 本文小结 准备工作 当然我们也可以不手动创建topic,在执行代码kafkaTemplate. ...
- SpringBoot整合kafka实战之带回调的生产者
本文来说下SpringBoot整合kafka部分知识内容 文章目录 带回调的生产者 方式一 方式二 本文小结 带回调的生产者 前面我们说了简单的生产和消费,本文说下带回调的生产者.kafkaTempl ...
- springboot 整合kafka 实现生产,消费数据
一 kafka集群的启动 1.1 机器说明 192.168.152.128 master 192.168.152.129 slaver01 192.168.152.130 slaver02 1.2 查 ...
- Kafka精品教学(入门,安装,Springboot整合Kafka)
ps:本文是博主结合视频和博客学习之后,自己实验总结编写的,如果侵权请联系删除. 要学习kafka首先要了解什么是消息队列,因为Kafka 是一个分布式的基于发布 / 订阅模式的消息队列(Messag ...
- RabbitMQ原理及SpringBoot整合RabbitMQ
RabbitMQ原理及SpringBoot整合RabbitMQ 1. RabbitMQ环境搭建 参考:https://blog.csdn.net/u013071014/article/details/ ...
- SpringBoot整合 ActiveMQ、SpringBoot整合RabbitMQ、SpringBoot整合Kafka
1.概念:SpringBoot 整合消息服务2.具体内容对于异步消息组件在实际的应用之中会有两类:· JMS:代表作就是 ActiveMQ,但是其性能不高,因为其是用 java 程序实现的:· AMQ ...
最新文章
- 模拟文件上传(一):手动文件上传
- 命令行神器 Click 简明笔记
- 【采用】【风控体系】携程基于大数据分析的实时风控体系
- 数据库的三大范式以及五大约束
- boost::random模块实现允许直观地检查分布函数的结果的测试程序
- 百度阿里网易大疆等大小厂前端校招面筋 | 掘金技术征文
- Ubuntu下安装配置java及环境变量
- 【报告分享】2019区块链赋能新型智慧城市白皮书.pdf(附204页电子书下载链接)
- Silverlight 4 的打印支持
- dotnetbar 5.8.0.3
- iredmail开源邮件系统部署
- Python-20-异常处理
- 【css】关于pdf分页(page-break)
- redis 常用配置文件配置
- 计算机网络辅助英语写作,基于计算机网络的英语写作教学
- 解决Intellij IDEA 一直在indexing,清除缓存后重启无效,手动清除缓存
- 2020年-数据库实验详述-BUPT 信通院-- 十安辰
- 周易六十四卦——水风井卦
- CacheCloud管理平台
- 获得代理ippython_Python爬虫代理IP从哪里获取?
热门文章
- eclipse中创建maven项目
- HTML5 video 自动播放
- VISP学习:二、Visp的手动安装
- 双旦特惠集锦,设计师的专属福利
- synchronized 关键字
- 如何设计文化衫中考计算机试题,初中文化衫图片 初中科技主题涂鸦文化衫图案设计...
- Android Q-wifi启动流程(一)
- 【牛客网】BC23 时间转换
- Loot创始人提出Loot扩展项目提案,激励Loot扩展项目创作者
- os.Open()和os.OpenFile#40;#41;的区别