消息中间件Kafka

Kafka简介

消息 Message

网络中的两台计算机或者两个通讯设备之间传递的数据。例如说:文本、音乐、视频等内容。

队列 Queue

一种特殊的线性表(数据元素首尾相接),特殊之处在于只允许在首部删除元素和在尾部追加元素。入队、出队。
消息队列 MQ
消息+队列,保存消息的队列。消息的传输过程中的容器;主要提供生产、消费接口供外部调用做数据的存储和获取。

Kafka是分布式的发布—订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年12月份开源,成为Apache的顶级项目。Kafka是一个高吞吐量的、持久性的、分布式发布订阅消息系统。它主要用于处理活跃的数据(登录、浏览、点击、分享、喜欢等用户行为产生的数据)。

三大特点:

高吞吐量

可以满足每秒百万级别消息的生产和消费——生产消费。

持久性

有一套完善的消息存储机制,确保数据的高效安全的持久化——中间存储。

分布式

基于分布式的扩展和容错机制;Kafka的数据都会复制到几台服务器上。当某一台故障失效时,生产者和消费者转而使用其它的机器——整体健壮性。

一个MQ需要哪些部分?生产、消费、消息类别、存储等等。
对于kafka而言,kafka服务就像是一个大的水池。不断的生产、存储、消费着各种类别的消息。那么kafka由何组成呢?

Kafka服务:
Topic:主题,Kafka处理的消息的不同分类。
Broker:消息代理,Kafka集群中的一个kafka服务节点称为一个broker,主要存储消息数据。存在硬盘中。每个topic都是有分区的。
Partition:Topic物理上的分组,一个topic在broker中被分为1个或者多个partition,分区在创建topic的时候指定。
Message:消息,是通信的基本单位,每个消息都属于一个partition
Kafka服务相关
Producer:消息和数据的生产者,向Kafka的一个topic发布消息。
Consumer:消息和数据的消费者,定于topic并处理其发布的消息。
Zookeeper:协调kafka的正常运行。

Kafka安装配置

  ——standalone

解压: opt]# tar -zxvf soft/kafka_2.10-0.10.0.1.tgz
重命名:opt]# mv kafka_2.10-0.10.0.1/ kafka
添加KAFKA_HOME至环境变量:/etc/profile
配置:
关于zookeeper,有两种方式可选,内置或是外置,推荐外置的zk集群,内置的zk,主要自己测试来用。
内置关于配置和启动ZK服务:
配置ZK文件: KAFKAHOME/config/zookeeper.propertiesdataDir/tmp/zookeeperzknohup KAFKA_HOME/bin/zookeeper-server-start.sh KAFKA_HOME/  
config/zookeeper.properties > /opt/logs/kafka-zk.log 2>&1 &  
   查看日志:more /opt/logs/kafka-zk.log  
启动kafka-server  
  配置相关参数:
KAFKA_HOME/config/server.properties
主要参数:broker.id、port、log.dirs、zookeeper.connect
broker.id=0
log.dirs=/opt/kafka/logs/ [kafka数据的存放目录]
zookeeper.connect=master:2181,slave01:2181,slave02:2181
启动:
nohup KAFKAHOME/bin/kafkaserverstart.sh KAFKA_HOME/
config/server.properties > /opt/logs/kafka-server.log 2>&1 &
查看日志:more /opt/logs/kafka-server.log

Kafka操作
——topic
增:新增一个topic:”kafka”,为它分配一个分区,保存一个副本
bin/kafka-topics.sh –create –topic kafka –zookeeper master:2181 –partitions 3 –replication-factor 2

#replication-factor不能大于broker数

bin/kafka-topics.sh –create –zookeeper master:2181 –replication-factor 1 –partitions 3 –topic world
查:查询kafka的信息【不加topic是查询所有的topic的详情】
bin/kafka-topics.sh –describe –zookeeper master:2181 –topic kafka
所有可以使用的topic
bin/kafka-topics.sh –list –zookeeper master:2181
改:修改hello为2个分区 alter:修改partition数(只能增加)
bin/kafka-topics.sh –alter –zookeeper master:2181 –partitions 3 –topic kafka
删:删除world的topic
bin/kafka-topics.sh –delete –zookeeper master:2181 –topic world
是否开启topic的删除功能:默认为false。 如果要开启删除topic 开关
在kafka/conf/server.properties 里的最后一行添加:delete.topic.enable=true

Kafka操作
——生产者消费者案例

创建生产者 producer
必须的参数:
broker-list:kafka的服务地址[多个用逗号隔开]、topic:具体的单个topic
bin/kafka-console-producer.sh –broker-list localhost:9092 –topic kafka
创建消费者 consumer
必须的参数:
Zookeeper:kafka的zk集群地址;
Topic\whitelist\blacklist:
1、具体的单个topic
2、多个白名单topic字符串[逗号隔开]。
3、多个黑名单topic字符串[逗号隔开]。
bin/kafka-console-consumer.sh –zookeeper master:2181 –topic kafka –from-beginning
标记删除的topic也可以使用

Kafka安装配置
——cluster
Kafka集群中,没有主节点和从节点之分。搭建起来也是非常容易。
只需要将standalone中搭建好的节点拷贝scp到其他节点上,注意不要把日志数据拷贝到另外的机器上。
scp -r kafka/ root@slave01:/opt/
scp -r kafka/ root@slave02:/opt/
修改 KAFKAHOME/config/server.propertiesbroker.id1,2kafkanohup KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/
config/server.properties > /opt/logs/kafka-zk.log 2>&1 &

Kafka组件
——Broker
Broker:配置文件server.properties
1、为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数达到一定阀值或者过了一定的时间间隔时,再flush到磁盘,这样减少了磁盘IO调用的次数。
配置:Log Flush Policy
#log.flush.interval.messages=10000 一个分区的消息数阀值
#log.flush.interval.ms=1000
2、kafka的消息保存一定时间(通常为7天)后会被删除。
配置:Log Retention Policy
log.retention.hours=168
#log.retention.bytes=1073741824
log.retention.check.interval.ms=300000

Producer:配置文件:producer.properties
1、自定义partition
Producer也根据用户设置的算法来根据消息的key来计算输入哪个partition:partitioner.class
2、异步或者同步发送
配置项:producer.type
异步或者同步发送
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据的通讯方式。
3、批量发送可以很有效的提高发送效率。
Kafka producer的异步发送模式允许进行批量发送,先将消息缓存在内存中,然后一次请求批量发送出去。
具体配置queue.buffering.max.ms、queue.buffering.max.messages。
默认值分别为5000和10000

consumers:配置文件:consumer.properties
1、每个consumer属于一个consumer group,可以指定组id。group.id
2、消费形式:
组内:组内的消费者消费同一份数据;同时只能有一个consumer消费一个Topic中的1个partition;一个consumer可以消费多个partitions中的消息。所以,对于一个topic,同一个group中推荐不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。
组间:每个消费组消费相同的数据,互不影响。
3、在一个consumer多个线程的情况下,一个线程相当于一个消费者。
例如:partition为3,一个consumer起了3个线程消费另一个后来的consumer就无法消费。

1、每个partition在存储层面是append log文件。新消息都会被直接追加到log文件的尾部,每条消息在log文件中的位置称为offset(偏移量)。
2、每条Message包含了以下三个属性:
1°、offset 对应类型:long 此消息在一个partition中序号。可以认为offset是partition中Message的id
2°、MessageSize 对应类型:int32 此消息的字节大小。
3°、data 是message的具体内容。
3、越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力。
4、总之:业务区分增加topic、数据量大增加partition。

注:如果指定的topic不存在则会创建
partitions数目和num.partitions一致 【server.properties】默认1
重复因子:default.replication.factor 一致【server.properties】默认1
1、将生产者的配置文件放在程序的资源目录里。
2、java加载配置文件生产数据
//加载和配置文件
Properties prop = new Properties();
prop.load(ProducerDemo.class.getClassLoader().getResourceAsStream(“producer.properties”));
Producer

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值