- Kafka简介
- Kafka是一个分布式的流媒体平台。
- 应用:消息系统、日志收集、用户行为追踪、流式处理。
- Kafka特点
- 高吞吐量、消息持久化、高可靠性、高扩展性。
- Kafka术语
- Broker, Zookeeper
- Topic、 Partition, Offset
- Leader Replica 、 Follower Replica
1、为什么要使用Kafka?
因为不管是Kafka也好还是阻塞队列也好,都是一种消息队列的框架,具有很好的封装性,都能实现这样的一个消息队列的功能,但是Kafka是目前性能最好的消息队列服务器,它能处理TB级别的海量数据,并且在我们的系统中评论、点赞、关注等等通知是十分频繁的,使用Kafka能保证一个最好的性能。
2、Kafka的特点
- 高吞吐量。它处理数据的能力很强,能够处理海量的数据。其为何能如此之强,是由于下面这个特点。
- 消息持久化。其可以将数据永久化的保留到某个介质里,类似于硬盘。也就是说其可以将数据存到硬盘上而不是内存里,硬盘的空间是要比内存大很多的,这就满足了处理海量数据的一个前提。但有的人要问了,存到硬盘中读取速度不是会变慢吗?这样不会影响性能吗?但实际上对硬盘数据的顺序读写的速度是要大于对内存数据的随机读取的。Kafka正是利用了这一点,对数据进行一个顺序读写,保证了一个很高的性能。
- 高可靠。这是因为它是一个分布式的服务器,可以做集群部署,提高容错率。
- 高扩展性。当当前服务器不够用时,可以直接进行添加,表现出高的扩展性。
3、启动步骤(项目应用只需要启动前两项即可):
-
启动zookeeper:
bin\windows\zookeeper-server-start.bat config\zookeeper.properties -
启动Kafka:
bin\windows\kafka-server-start.bat config\server.properties -
启动Kafka的topic,创建topic空间:kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
-
启动Kafka producer发送数据:kafka-console-producer.bat --broker-list localhost:9092 --topic test
-
启动Kafka consumer接收数据:kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
4、Spring整合Kafka
- 引入依赖
- spring-kafka
- 配置Kafka
- 配置server、consumer
- 访问Kafka
- 生产者
- kafkaTemplate,send (topic, data);
- 消费者
- @KafkaListener (topics – ("test"))
- public void handleMessage(ConsumerRecord record) ()
- 生产者
访问Kafka时,生产者只需要利用spring封装工具KafkaTemplate发送数据,topic为指定的主题。消费者消费数据先要在对应的方法上加入注解以及要从哪个topic中拿数据,再用一个方法把数据取出来即可。
生产者发消息是主动去调的,消费者处理消息是被动自动去调的。
- mvn仓库中查找导入spring kafka依赖包。
- 配置文件中对Kafka进行配置。包括:
# KafkaProperties
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=community-consumer-group
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=3000
5、Kafka 缺点?
- 复杂性高:Kafka本身是一个分布式系统,需要进行集群部署和管理,对于非专业人士来说,部署和管理都存在一定的复杂性。
- 存储成本高:Kafka的存储是基于磁盘的,需要大量的存储空间,存储成本相对比较高。
- 网络带宽需求高:Kafka需要大量的网络带宽来进行数据传输,如果网络带宽不够,就会导致数据传输速度慢,影响系统性能。
- 消息顺序问题:Kafka是一个分布式系统,消息的顺序并不能够得到完全保证,对于一些需要保证消息顺序的场景,需要开发者进行额外的处理。
- 配置复杂:Kafka需要进行一系列的配置来满足不同场景的需求,这对于非专业人士来说,配置会比较复杂。
更多请看文章:t.csdn.cn/zoLiw