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相关推荐

  1. kafka 安装使用 /springboot整合kafka /消息投递机制以及存储策略 /副本处理机制

    一.背景 1.基本信息 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流 ...

  2. SpringBoot整合kafka(实现producer和consumer)

    转载自 SpringBoot整合kafka(实现producer和consumer) 在Windows环境下安装运行Kafka:https://www.jianshu.com/p/d64798e81f ...

  3. springboot 整合 kafka demo 顺便看一下源码

    大家好,我是烤鸭: 今天分享下 springboot 整合 kafka. 1.  环境参数: windows + kafka_2.11-2.3.0 + zookeeper-3.5.6 + spring ...

  4. SpringBoot整合kafka之kafka分区实战

    本文来说下SpringBoot整合kafka之kafka分区实战 文章目录 准备工作 程序代码 程序测试 本文小结 准备工作 当然我们也可以不手动创建topic,在执行代码kafkaTemplate. ...

  5. SpringBoot整合kafka实战之带回调的生产者

    本文来说下SpringBoot整合kafka部分知识内容 文章目录 带回调的生产者 方式一 方式二 本文小结 带回调的生产者 前面我们说了简单的生产和消费,本文说下带回调的生产者.kafkaTempl ...

  6. springboot 整合kafka 实现生产,消费数据

    一 kafka集群的启动 1.1 机器说明 192.168.152.128 master 192.168.152.129 slaver01 192.168.152.130 slaver02 1.2 查 ...

  7. Kafka精品教学(入门,安装,Springboot整合Kafka)

    ps:本文是博主结合视频和博客学习之后,自己实验总结编写的,如果侵权请联系删除. 要学习kafka首先要了解什么是消息队列,因为Kafka 是一个分布式的基于发布 / 订阅模式的消息队列(Messag ...

  8. RabbitMQ原理及SpringBoot整合RabbitMQ

    RabbitMQ原理及SpringBoot整合RabbitMQ 1. RabbitMQ环境搭建 参考:https://blog.csdn.net/u013071014/article/details/ ...

  9. SpringBoot整合 ActiveMQ、SpringBoot整合RabbitMQ、SpringBoot整合Kafka

    1.概念:SpringBoot 整合消息服务2.具体内容对于异步消息组件在实际的应用之中会有两类:· JMS:代表作就是 ActiveMQ,但是其性能不高,因为其是用 java 程序实现的:· AMQ ...

最新文章

  1. 模拟文件上传(一):手动文件上传
  2. 命令行神器 Click 简明笔记
  3. 【采用】【风控体系】携程基于大数据分析的实时风控体系
  4. 数据库的三大范式以及五大约束
  5. boost::random模块实现允许直观地检查分布函数的结果的测试程序
  6. 百度阿里网易大疆等大小厂前端校招面筋 | 掘金技术征文
  7. Ubuntu下安装配置java及环境变量
  8. 【报告分享】2019区块链赋能新型智慧城市白皮书.pdf(附204页电子书下载链接)
  9. Silverlight 4 的打印支持
  10. dotnetbar 5.8.0.3
  11. iredmail开源邮件系统部署
  12. Python-20-异常处理
  13. 【css】关于pdf分页(page-break)
  14. redis 常用配置文件配置
  15. 计算机网络辅助英语写作,基于计算机网络的英语写作教学
  16. 解决Intellij IDEA 一直在indexing,清除缓存后重启无效,手动清除缓存
  17. 2020年-数据库实验详述-BUPT 信通院-- 十安辰
  18. 周易六十四卦——水风井卦
  19. CacheCloud管理平台
  20. 获得代理ippython_Python爬虫代理IP从哪里获取?

热门文章

  1. eclipse中创建maven项目
  2. HTML5 video 自动播放
  3. VISP学习:二、Visp的手动安装
  4. 双旦特惠集锦,设计师的专属福利
  5. synchronized 关键字
  6. 如何设计文化衫中考计算机试题,初中文化衫图片 初中科技主题涂鸦文化衫图案设计...
  7. Android Q-wifi启动流程(一)
  8. 【牛客网】BC23 时间转换
  9. Loot创始人提出Loot扩展项目提案,激励Loot扩展项目创作者
  10. os.Open()和os.OpenFile#40;#41;的区别