首页 > 云计算 > Openstack > 云计算大数据面试题,云计算大数据面试题集锦
1. 大数据领域数据类型
1.1 有界数据
一般批处理(一个文件 或者一批文件),不管文件多大,都是可以度量
mapreduce hive sparkcore sparksql
1.2 无界数据
源源不断的流水一样 (流数据)
Storm SparkStreaming
2. 消息队列(Message Queue)
3. 消息队列的分类
3.1 点对点(P2P)
3.2 发布订阅(Pub/Sub)
消息队列(Queue)、主题(Topic)、发布者(Publisher)、订阅者(Subscriber)
4. Kafka的简介
5. Kafka的特点
6. Kafka的组件
7. Kafka的服务
8. Kafka的安装
8.1 单机版的安装
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
broker.id=1
log.dirs=/opt/kafka/logs
zookeeper.connect=uplooking03:2181,uplooking04:2181,uplooking05:2181
listeners=PLAINTEXT://:9092
kafka-server-start.sh [-daemon] server.properties
kafka-server-stop.sh
8.2 集群的安装
只需要在每个机器上修改对应的 ==broker.id=1== 即可
9. Kafka中Topic的操作
kafka-topics.sh --create --topic t1 --partitions 3 --replication-factor 1 --zookeeper uplooking03:2181,uplooking04:2181
kafka-topics.sh --list --zookeeper uplooking03
kafka-topics.sh --describe --topic t1 --zookeeper uplooking04:2181
PartitionCount:topic对应的partition的个数
ReplicationFactor:topic对应的副本因子,说白就是副本个数
Partition:partition编号,从0开始递增
Leader:当前partition起作用的breaker.id
Replicas: 当前副本数据存在的breaker.id,是一个列表,排在最前面的其作用
Isr:当前kakfa集群中可用的breaker.id列表
kafka-topics.sh --alter --topic t1 --partitions 4 --zookeeper uplooking03
kafka-topics.sh --delete --topic t1 --zookeeper uplooking03
10. Kafka中的生产者和消费者接口
11. Kafka自带的生产和消费消息的工具
11.1 kafka-console-producer.sh(生产工具)
kafka-console-producer.sh --topic t1 --broker-list uplooking03:9092,uploo
king04:9092,uplooking05:9092
11.2 kafka-console-consumer.sh(消费工具)
kafka-console-consumer.sh --zookeeper uplooking03 --topic t1
--from-beginning:从头开始消费
--blacklist:黑名单过滤(kafka-console-consumer.sh --zookeeper uplooking03 --blacklist t1,t3)
--whitelist:白名单过滤(kafka-console-consumer.sh --zookeeper uplooking03 --whitelist t2)
ps:--topic|--blacklist|--whitelist 只能出现其中一个
12. ==Flume与Kafka的整合==
# 对各个组件的描述说明
# 其中a1为agent的名字
# r1是a1的source的代号名字
# c1是a1的channel的代号名字
# k1是a1的sink的代号名字
############################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 用于描述source的,类型是netcat网络
a1.sources.r1.type = netcat
# source监听的网络ip地址和端口号
a1.sources.r1.bind = uplooking01
a1.sources.r1.port = 44444
# 用于描述sink,类型是kafka
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.topic = hadoop
a1.sinks.k1.brokerList = uplooking03:9092,uplooking04:9092,uplooking05:9092
a1.sinks.k1.requiredAcks = 1
a1.sinks.k1.batchSize = 2
# 用于描述channel,在内存中做数据的临时的存储
a1.channels.c1.type = memory
# 该内存中最大的存储容量,1000个events事件
a1.channels.c1.capacity = 1000
# 能够同时对100个events事件监管事务
a1.channels.c1.transactionCapacity = 100
# 将a1中的各个组件建立关联关系,将source和sink都指向了同一个channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
[root@uplooking01:/opt/flume/conf]
flume-ng agent --name a1 --conf-file flume-kafka.properties
[root@uplooking03:/opt/flume/conf]
kafka-console-consumer.sh --zookeeper uplooking03 --topic hadoop
[root@uplooking03:/]
nc uplooking01 44444
13. Kafka的API操作(生产者和消费者)
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.10.0.1</version>
</dependency>
13.1 Kafka的生产者
bootstrap.servers=uplooking03:9092,uplooking04:9092,uplooking05:9092
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
public class MyKafkaProducer {
public static void main(String[] args) throws IOException {
Properties prop = new Properties();
prop.load(MyKafkaProducer.class.getClassLoader().getResourceAsStream("producer.properties"));
KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(prop);
kafkaProducer.send(new ProducerRecord<String, String>("hadoop", "name", "admin123"));
kafkaProducer.close();
}
}
13.2 Kafka的消费者
zookeeper.connect=uplooking03:2181,uplooking04:2181,uplooking05:2181
group.id=test-consumer-group
bootstrap.servers=uplooking03:9092,uplooking04:9092,uplooking05:9092
key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.load(MyKafkaConsumer.class.getClassLoader().getResourceAsStream("consumer.properties"));
KafkaConsumer<String, String> kafkaConsumer = new KafkaConsumer<String, String>(prop);
Collection topics = new ArrayList();
topics.add("hadoop");
kafkaConsumer.subscribe(topics);
while (true) {
ConsumerRecords<String, String> records = kafkaConsumer.poll(1000);
for (ConsumerRecord<String, String> record : records) {
System.out.println(record.value());
}
}
}
package com.uplooking.bigdata.kafka.partition;
public class MyCustomPartition implements Partitioner {
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
//获取分区数, 分区编号一般都是从0开始
int partitionSize = cluster.partitionCountForTopic(topic);
int keyHash = Math.abs(key.hashCode());
int valueHash = Math.abs(value.hashCode());
return keyHash % partitionSize;
}
public void close() {
}
public void configure(Map<String, ?> configs) {
}
}
partitioner.class=com.uplooking.bigdata.kafka.partition.MyCustomPartition
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69916964/viewspace-2648126/ ,如需转载,请注明出处,否则将追究法律责任。