Spark对接Hive(必会)
Spark操作Hive相比较Hive执行的MR,效率要高,因为Spark是基于DAG有向无环图,实现的内存迭代式计算,MR是基于磁盘计算引擎,相比Spark的迭代计算,要慢的多,并且磁盘IO太大,没有太好的优化,Spark是内存处理,速度要快的多,所以使用Spark对接Hive已经成为主流,例如:SparkSQL来实现的数仓操作
实现方式:将Hive中的hive-site.xml文件和hdfs-site.xml、core-site.xml拷贝过来,放入idea中resource中即可
Kafka
消息中间件、消息队列
Kafka适合什么样的场景?
它可以用于两大类别的应用:
- 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
- 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)
kafka的组件:
-
消息生产者:Producer,是消息的生产源头,负责生产消息并发送到Kafka服务器上
-
消息消费者:Consumer,是消息的使用方,负责消费Kafka服务器上的消息
-
主题:Topic,由用户定义在Kafka服务器上面,用于建立生产者和消费者之间的消费关系,生产者生产消息到指定Topic下面,消费者从这个Topic消费数据
-
分区:Partition,一个Topic下面会有多个分区主要是做备份,实现高容错性,每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。leader server 处理一切对 partition (分区)的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers 中的一台服务器会自动成为新的 leader。每台 server 都会成为某些分区的 leader 和某些分区的 follower,因此集群的负载是平衡的。
-
Broker:kafka的服务器,用户存储消息,分布式
-
消费者组:Group,用于归纳组别,主要是在消费的时候,可以定义多个消费者,同时消费数据,保证在一个组别下即可,注意:消费者组可以消费一个或者多个分区的数据,但是一个分区的数据同一时刻只能被一个消费者来消费,防止重复消费
-
Offset:消息的偏移量,在消费Kafka分区内数据的时候,Kafka会记录消息消费的偏移量,在内部也会被存储
(kafka为分区中的每条消息保存一个
偏移量(offset)
,这个偏移量
是该分区中一条消息的唯一标示符。也表示消费者在分区的位置。例如,一个位置是5的消费者(说明已经消费了0到4的消息),下一个接收消息的偏移量为5的消息。实际上有两个与消费者相关的“位置”概念:消费者的位置给出了下一条记录的偏移量。它比消费者在该分区中看到的最大偏移量要大一个。 它在每次消费者在调用poll(long)中接收消息时自动增长。
“已提交”的位置是已安全保存的最后偏移量,如果进程失败或重新启动时,消费者将恢复到这个偏移量。消费者可以选择定期自动提交偏移量,也可以选择通过调用commit API来手动的控制(如:commitSync 和 commitAsync)。
这个区别是消费者来控制一条消息什么时候才被认为是已被消费的,控制权在消费者)
Kafka集群:
- Kafka集群可以保存多种数据类型的数据,每个数据都会保存到Topic下面
- Kafka集群可以创建多个Topic,并且每个Topic的分区都有副本机制,可以自己指定
- 每个分区的数据是由多个segment组成,里面包含一个或者多个Index文件和.log文件
- 每个分区的副本,不会和主分区在一起,会分发到其他节点
ActionMQ、RabbitMQ、Kafka(支持动态扩容)
Kafka的常用命令(0.8):
注意:Kafka1.0以上版本的命令和0.8有些不同
新建主题:
./bin/kafka-topics.sh --create --zookeeper node4:2181 --partitions 3 --replication-factor 3 --topic sz1901
查看主题:
./bin/kafka-topics.sh --list --zookeeper node4:2181
查看主题详情:
./bin/kafka-topics.sh --describe --zookeeper node4:2181 --topic sz1901test
删除主题:
./bin/kafka-topics.sh --delete --zookeeper node4:2181 --topic sz1901test
注意:需要添加相关参数 server.properties中设置delete.topic.enable=true
修改分区数量(只能增加不能减少)
bin/kafka-topics.sh --zookeeper node4:2181 --alter --partitions 5 --topic sz1901
启动生产者(0.8):
./bin/kafka-console-producer.sh --broker-list node1:9092 --topic sz1901
启动消费者(0.8):
./bin/kafka-console-consumer.sh --zookeeper node4:2181 --topic sz1901 --from-beginning
Kafka文件存储机制
如果我们在往Kafka内部生产数据的话,那么Kafka会根据分区进行分配数据,并且每个分区内都会有一个log文件,和一个Index索引文件,log文件内存储的是消息(数据),而index索引文件,存储的是offset索引信息
Kafka分区和消费者的消费策略
通过轮循的方式将每个分区轮循到相应的消费者组里面的每个消费者身上。