消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。
1.1 Kafka的特性:
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
- 可扩展性:kafka集群支持热扩展
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
- 高并发:支持数千个客户端同时读写
1)每个service里面的kafka consumer数量都小于对应的topic的partition数量,但是所有服务的consumer数量之和等于partition的数量,这是因为分布式service服务的所有consumer都来自一个consumer group;
2) 如果来自不同的consumer group就会处理重复的message了。同一个consumer group下的consumer不能处理同一个partition,不同的consumer group可以处理同一个topic,那么都是顺序处理message,一定会处理重复的。
一般这种情况都是两个不同的业务逻辑,才会启动两个consumer group来处理一个topic。
线程的同步:相当于多个线程去同时访问同一块资源,但是每次只能有一个线程去访问,也就是会阻塞。解决线程同步的方法有(这也是常问的):互斥锁,信号处理,条件变量。
怎么创建socket通信
服务器:
1.创建一个socket
2.bind一个句柄(端口和地址)
3.listen设置监听的客户数
4.accept客户端的句柄
5.读写。
客户机:
1.创建一个socket
2.connect到服务器
3.读写操作。
线程和进程的区别:
1.进程是系统进行资源分配和调度的一个独立单位。 线程是:是CPU调度和分派的基本单位。
2.线程的开销比进程的开销小。
3.一个进程里面可以创建多个线程。
4.进程是独立的内存单元,线程可以多个线程共享一片资源,提高处理效率。
进程间的通信方式有哪几种:
管道,信号,socket,共享内存,消息队列