本文主要记录学习过程和相关参考资料
学习目标:
熟练使用java语言;
了解springboot,redis,netty,mybatis等常用中间件;
了解JVM,类加载机制;
了解内存模型,多线程
- 第1-2天、Kafka,构建TB级异步消息系统
- 其他相关:下载和使用IDEA
10/2:牛客网就业项目,第5章 Kafka,构建TB级异步消息系统
1、BlockingQueue(接口)
通过一个阻塞队列来实现对生产者和消费者线程的管理,以降低系统资源的浪费。
阻塞队列在生产者与消费者之间建立了缓冲,提高了系统的性能
具体来说以点对点的方式,当队列满了的时候,阻塞生产者生产,此时生产者不会占用资源;当队列 为空的时候,阻塞消费者消费,此时消费者不会占用资源。
代码实现:
import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class hello {
public static void main(String[] args) {
BlockingQueue queue = new ArrayBlockingQueue(10);
new Thread(new Producer(queue)).start();
new Thread(new Consumer(queue)).start();
new Thread(new Consumer(queue)).start();
new Thread(new Consumer(queue)).start();
}
static class Producer implements Runnable{
private BlockingQueue queue;
public Producer(BlockingQueue queue){
this.queue = queue;
}
@Override
public void run() {
try {
for(int i = 0;i<100;i++){
Thread.sleep(20);
queue.put(i);
System.out.println(Thread.currentThread().getName()+"生产:" + queue.size());
}
}catch (Exception e){
e.printStackTrace();
}
}
}
static class Consumer implements Runnable{
private BlockingQueue queue;
public Consumer(BlockingQueue queue){
this.queue = queue;
}
@Override
public void run() {
try{
while(true){
Thread.sleep(new Random().nextInt(1000));//0-1000随机取,消费者的消费能力没有生产者快
queue.take();
System.out.println(Thread.currentThread().getName() + "消费:" + queue.size());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
2、Kafka入门
Kafka是一个分布式的流媒体平台(最好用的消息队列)
应用:消息系统,日志收集,用户行为跟踪,流式处理
特点:高吞吐量(对硬盘数据顺序读写,性能很高,高于对内存的随机读取),消息持久化(存到硬盘里,且硬盘价格比内存低,容量比内存大),高可靠性(分布式服务器,集成部署,一台服务器挂了还有另一台),高扩展性(服务器不够用了,可以加服务器)
它可以用来处理TB级别的数据,我们主要用它来发消息。
Broker(Kafka的单个服务器),Zookeeper(用来管理服务器集群),Topic(用来存放消息的位置),Offset(队列中的索引),Partition(Topic中的分区,为了提高容错率,多存数据),Leader Replica(主副本,处理请求,比如处理消费者的使用请求),Follower Replica(从副本,在分布式情况下,当主副本挂了的时候,从从副本中选择一个作为主副本)
下载安装Kafka:
第一步,访问kafka.apache.org
第二步、点击下载
这是一个清华的国内源,一个包里就包含了win和linux系统的版本。
第三步、直接解压即可
第四步、配置kafka
首先在/config中配置zookeeper properties文件和server.properties
①打开相应的安装位置
②server.properties
③zookeeper properties
配置完成!接下来可以参考官网上的QUICKSTART来实操一番。
第五步、启动kafka
cmd,首先用配置文件zookeeper.properties来执行zookeeper-server-start.bat文件
F:kafka_2.13-3.0.0>binwindowszookeeper-server-start.bat configzookeeper.prop erties
相应的我们可以在F:kafka_2.13-3.0.0workdata目录中找到新创建的zookeeper文件。
然后用配置文件server.properties来执行kafka-server-start.bat文件
F:kafka_2.13-3.0.0>binwindowskafka-server-start.bat configserver.properties
然后执行下图的相关代码,实现生产者和消费者之间的线程通信.
使用kafka配置和启动的过程有些啰嗦,理解一下就可以。
第一步、官网的社区版本就够用了
第二步、新建一个java项目,选择java,next即可
第三步、无需添加编译器,点击这两个按钮中的任意一个,直接运行即可。
持续更新…



