Hadoop学习日记(十六)——Kafka

本文是Hadoop学习日记的第十六篇,主要介绍了Kafka的基本概念、单节点测试、集群配置、常用命令行操作,以及Kafka与Zookeeper的关系。通过Java客户端编程展示了Kafka生产者和消费者的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop学习日记(十六)

2019.07.08、07.09

主题:Kafka

学习过程主要参考段海涛大数据p61

注:因项目需要,故提前学习视频中Kafka相关内容,Hadoop HA机制以及Hive、HBase、Storm后续再补充。

1. Kafka要点

1. Kafka是一个分布式的消息缓存系统;

2. Kafka集群中的服务器都叫做broker;

3. Kafka有两类客户端,一类叫作producer(消息生产者),一类叫作consumer(消息消费者),客户端和broker之间采用TCP协议连接;

4. Kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区(partition),以分担消息读写的负载;

5. 每一个分区都可以由多个副本,以防止数据的丢失;

6. 某一给分区中的数据如果需要更新,都必须通过该分区所有副本中的leader来更新;

7. 消费者可以分组,例如两个消费者组A和B,共同消费一个topic:order_info,A和B所消费的消息不会重复,比如order_info中有100个消息,每一个消息有一个id,编号从0-99,那么如果A组消费0-49,B组就消费50-99;

8. 消费者在消费某个具体topic中的消息时,可以指定其实偏移量。

2.Kafka单节点测试

Kafka主目录的bin目录下提供了一些脚本可供单节点测试kafka(Kafka单节点测试),但是在输入“bin/zookeeper-server-start.sh config/zookeeper.properties”时,总是提示"Classpath is empty. Please build the project first e.g. by running ......"。刚开始受这个讨论的误导,正确的解决方案在另一个讨论里。刚开始下载的Kafka是source版本的,应该是没有经过编译的,后来下载了binary版本的是编译好的,如果编译source版本的应该也是可行的。

Kafka具体的单节点测试流程见官方文档Kafka单节点测试

3.Kafka集群配置

集群配置主要在config/server.propertities中修改broker id以及zookeeper.connect两项。

三台虚拟机,broker id依次为0,1,2.

zookeeper.connect=slave1:2181,slave2:2181,slave3:2181

以上两项参数配置好之后,在每个节点上都执行bin/kafka-server-start.sh config/server.properties即可启动有3个节点的Kafka集群。

需要注意的是,对于每一个topic的每一个partition都会有不同的leader。

4. Kafka常用命令行操作

首先要启动zookeeper集群:zkServer.sh start  (每个zookeeper节点都要执行)

然后启动Kafka集群:bin/kafka-server-start.sh config/server.properties (每个节点都要执行)

创建Topic:bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic

查看Topic信息:bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic

删除Topic:bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic my-replicated-topic

创建生产者:bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic

创建消费者:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic (注意是否有--from-beginning)

列出所有Topic:bin/kafka-topics.sh --list --bootstrap-server 220.113.20.21:9092

5. Kafka与zookeeper的关系

Kafka使用zookeeper管理元数据,例如:记录topic名称、分区以及其副本分配等信息,用户权限控制的相关数据等。Kafka还会再zookeeper的某些上添加相应的监听器,用于监听集群的状态,例如:集群中所有broker通过zookeeper监听controller leader的状态。可以通过Kafka自带的脚本修改zookeeper触发相应操作,例如:优先副本选举。

6. Java客户端编程

参考了视频段海涛大数据p62p63,需要注意的是本次测试用的Kafka版本是2.3.0,视频中的版本较老,编程接口已经不适用。

下面将代码贴出:

首先是producer:

import  java.util.Properties;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

public class ProducerDemo {

	public static void main(String[] args) throws InterruptedException {
		Properties props=new Properties();
		props.put("bootstrap.servers","slave1:9092");
		props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
		props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
		
		Producer<String, String> producer =new KafkaProducer<>(props);
		for(int i=1;i<=20;++i)
		{
			Thread.sleep(500);
			producer.send(new ProducerRecord<String, String>("mygirls", "i said i love you for"+i+"times"));
		}
		
	}
	
}

接下来是consumer:

import java.util.Arrays;
import java.util.Properties;

import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.ConsumerRecord;


public class ConsumerDemo {

	public static void main(String[] args)
	{
		Properties props=new Properties();
		props.put("bootstrap.servers","slave1:9092");
		props.setProperty("group.id", "test");
		props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		
		Consumer<String, String> consumer =new KafkaConsumer<>(props);
		
		consumer.subscribe(Arrays.asList("mygirls","myboys"));
		
		while(true) {
			ConsumerRecords<String, String> records = consumer.poll(100);
			for(ConsumerRecord<String, String> record : records)
			{
				System.out.println(record.topic()+"--"+record.value());
			}
		}
	}
	
	
}

带回调函数的生产者:

producer.send(new ProducerRecord<String, String>("routepoint", str),new Callback() {
					
					@Override
					public void onCompletion(RecordMetadata arg0, Exception arg1) {
						// TODO Auto-generated method stub
						if(arg1==null) {
							System.out.println(arg0);
						}
					}
				});

 

课程简介:  本项目课程是一门极具综合性和完整性的大型项目课程;课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据和业务数据分析的需求及企业数据管理、数据运营需求。 本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。  拒绝demo,拒绝宏观抽象,拒绝只讲不练,本课程高度揉和理论与实战,并兼顾各层次的学员,真正从0开始,循序渐进,每一个步骤每一个环节,都会带领学员从需求分析开始,到逻辑设计,最后落实到每一行代码,所有流程都采用企业级解决方案,并手把手带领学员一一实现,拒绝复制粘贴,拒绝demo化的实现。并且会穿插大量的原创图解,来帮助学员理解复杂逻辑,掌握关键流程,熟悉核心架构。   跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建......逐渐展开整个项目的宏大视图,构建起整个项目的摩天大厦。  由于本课程不光讲解项目的实现,还会在实现过程中反复揉和各种技术细节,各种设计思想,各种最佳实践思维,学完本项目并勤于实践的话,学员的收获将远远超越一个项目的具体实现,更能对大型数据系统开发产生深刻体悟,对很多技术的应用将感觉豁然开朗,并带来融会贯通能力的巨大飞跃。当然,最直接的收获是,学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER课程模块: 1. 数据采集:涉及到埋点日志flume采集系统,sqoop业务数据抽取系统等; 2. 数据预处理:涉及到各类字典数据构建,复杂结构数据清洗解析,数据集成,数据修正,以及多渠道数据的用户身份标识打通:ID-MAPPING等;3. 数据仓库:涉及到hive数仓基础设施搭建,数仓分层体系设计,数仓分析主题设计,多维分析实现,ETL任务脚本开发,ETL任务调度,数据生命周期管理等;4. 数据治理:涉及数据资产查询管理,数据质量监控管理,atlas元数据管理系统,atlas数据血缘管理等;5. 用户画像系统:涉及画像标签体系设计,标签体系层级关系设计,各类标签计算实现,兴趣类标签的衰减合并,模型标签的机器学习算法应用及特征提取、模型训练等;6. OLAP即席分析平台:涉及OLAP平台的整体架构设计,技术选型,底层存储实现,Presto查询引擎搭建,数据服务接口开发等;7. 数据服务:涉及数据服务的整体设计理念,架构搭建,各类数据访问需求的restapi开发等;课程所涉及的技术: 整个项目课程中,将涉及到一个大型数据系统中所用到的几乎所有主要技术,具体来说,包含但不限于如下技术组件:l Hadoopl Hivel HBasel SparkCore /SparkSQL/ Spark GRAPHX / Spark Mllibl Sqoopl Azkabanl Flumel lasal Kafkal Zookeeperl Solrl Prestop
第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和伪分布式安装.avi 06-hadoop版本选择和伪分布式安装2.avi 07-hdfs&mapreduce;测试.avi 08-hdfs的实现机制初始.avi 09-hdfs的shell操作.avi 10-hadoop集群搭建的无密登陆配置.avi 第二天 hdfs的原理和使用操作、编程 01-NN元数据管理机制.avi 02-NN工作机制2.avi 03-DN工作原理.avi 04-HDFS的JAVA客户端编写.avi 05-filesystem设计思想总结.av i 06-hadoop中的RPC框架实现机制.avi 07-hadoop中的RPC应用实例demo.avi 08-hdfs下载数据源码跟踪铺 垫.avi 09-hdfs下载数据源码分析-getFileSystem.avi 10-hdfs下载数据源码分析-getFileSystem2.avi 第三天 mapreduce的原理和编程 01-hdfs源码跟踪之打开输入流.avi 02-hdfs源码跟踪之打开输入流总结.avi 03-mapreduce介绍及wordcount.avi 04-wordcount的编写和提交集群运行.avi 05-mr程序的本地运行模式.avi 06-job提交的逻辑及YARN框架的技术机制.avi 07-MR程序的几种提交运行模式.avi 08-YARN的通用性意义.avi 09-yarn的job提交流程.avi 第四天 常见mr算法实现和shuffle的机制 01-复习.avi 02-hadoop中的序列化机制.avi 03-流量求和mr程序开发.avi 04-hadoop的自定义排序实现.avi 05-mr程序中自定义分组的实现.avi 06-shuffle机制.avi 07-mr程序的组件全貌.avi 08-textinputformat对切片规划的源码分析.avi 09-倒排索引的mr实现.avi 10-多个job在同一个main方法中提交.avi 第五天 hadoop2.x中HA机制的原理和全分布式集群安装部署及维护 01-zookeeper.avi 02-zookeeper2.avi 03-NN高可用方案的要点1.avi 04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs--HA测试.avi 07-hdfs--动态增加节点和副本数量管理.avi 08-HA的java api访问要点.avi 09-hive入门.avi 第六天 hbase hive 01-复习ha相关.avi 02-hive的元数据库mysql方式安装配置.avi 03-hive的使用.avi 04-hive的常用语法.avi 05-hql语法及自定义函数.avi 06-hbase表结构.avi 07-hbase集群架构及表存储机制.avi 08-hbase-shell.avi 09-hbase的java api.avi 第七天 storm+kafka 006-kafka整合storm.avi 01-storm基本概念.avi 02-storm编程规范及demo编写.avi 03-storm的topology提交执行.avi 04-kafka介绍.avi 05-kafuka集群部署及客户端编程.avi 06-kafka消费者java客户端编程.avi 第八天 实战项目 01-项目背景及技术架构.avi 02-主要技术选型.avi 03-flume介绍及演示.avi 04-行为轨迹增强处理流程.avi 05-样本url筛选模块开发.avi 06-行为轨迹增强模块1.avi 07-行为轨迹增强模块2.avi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值