消息队列(Message Queue)
简单来说:消息队列的核心思想非常简单,就是一个生产消费队列。(
提供了异步的通信协议,可以实现进程间通信或同一进程的不同线程间通信。其中“消息”是指对包含必要信息的数据。消息的发送者发送完毕后立即返回,消息被存储进队列中,对这个消息感兴趣的消费者会订阅并接收和处理它。
)
稍微复杂点说:消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。
应用解耦,,消息与平台无关和语言无关提s高了程序的可扩展性。
异步通信:可以缩短请求等待的时间,使用专门处理请求的消费者来执行,提高了web页面的
数据持久化:未完成消息不会因为某些故障而丢失。
送达保证 :自身机制保证消息送达。
灵活性&峰值处理: 在访问量剧增的情况下,应用仍然需要继续发挥作用。应用实例可以控制拉取消息的频率,实现并发控制。
。
MQ阵容:
ActiveMQ 重量级老牌MQ,诞生自Java生态,功能完备,相关的介绍很多。很重量级。
RabbitMQ同样是老牌MQ,基于erlang实现,语言无关,功能完备,诞生自金融领域。
ZeroMQ 开发难度大。但是很快。ZeroMQ 本身就不是一个消息队列服务器,更像是一组底层网络通讯库,对原有的 Socket API 上加上一层封装而已。
Kafka MQ后起之秀,很多情况下超越了前辈,在大数据的支持方面,目前无人能出其右。在监控系统性能指标,用户行为分析等日志型信息方面性能好。
系统监控,用户行为分析等数据具有以下特点:
1. 数据不可变。
2. 海量数据。
3. 需要实时处理。
部署:
1 安装jdk ,下载java 8 以上版本的jdk,到本地安装并添加环境变量。
解压:
tar -zxf jdk-8u171-linux-x64.tar.gz
移动到安装目录:
mv jdk1.8.0_171/ /usr/local/
添加环境变量:
[root@bogon kafka_2.11-1.1.0]# cat /etc/profile.d/java.sh
# set JAVA JDK
export JAVA_HOME=/usr/local/jdk1.8.0_171/
export JRE_HOME=/usr/local/jdk1.8.0_171/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
测试:
[root@bogon kafka_2.11-1.1.0]# java -v
Unrecognized option: -v
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
2 安装单机kafka,(此时没有配置kafka集群)。下载压缩包。解压到安装目录。
3.启动zookeeper ,kafka依赖于zookeeper。
[root@bogon kafka_2.11-1.1.0]# bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
4.启动kafka,以守护进程模式。’
[root@bogon kafka_2.11-1.1.0]# bin/kafka-server-start.sh -daemon config/server.properties
以上为单机部署。
遇到问题:
安装的时候报错:
ERROR [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.net.UnknownHostException: bogon: bogon: 未知的名称或服务
修改主机名:
hostname localhost
使用:
kafka使用9092,为消息输入输出端口。
Zookeeper默认监听2181端口。