关于使用kafka的个人总结
来源:互联网 发布:sql server 2005 64位 编辑:程序博客网 时间:2024/06/17 12:46
本篇文章算是对几个月工作的一个总结吧,接触了几个月的kafka和flume,感觉自己也只能算是了解kafka的阶段,接下来也打算深入研究下kafka的原理,下面写的算是对工作中使用到的kafka方面的东西做个总结吧!
kafka概述
(有空可以浏览一下http://orchome.com)
当前kafka版本为0.10.0.0。
关于Kafka需要了解的几个关键词:
①Producer
发布消息的对象(flume)
②Consumer
订阅发布的消息并处理消息的对象(spark)
③Broker
Producer把生产的消息“推”到Broker中,Consumer可以从Broker中订阅一个 或多个topic,并从Broker中“拉”消息进行消费
④Topic
Kafka中把消息分门别类,每一类消息是一个topic
⑤Partition
Kafka把每个Topic分成多个partition,每个partition中的消息是有序的,partition中的每条消息都会被分配一个有序的id(offset)
Topic & Partition
1.kafka把一个topic分为1个或以上的partition,每个partition在物理上对应一个文件夹,
文件夹中存储的是该partition的所有消息以及一个索引文件。(以第一个消息的offset命名)
2.每一个分区都是一个顺序的消息队列,并且可以持续的添加。分区中的每条消息都被分配了一个序列号,即偏移量(64字节的offset),在每个分区中的偏移量都是唯一的
3.在发送一条消息时,可以指定这条消息的key,producer根据这个key和partition机制来判断将这条消息发送到哪个parition(通过实现kafka.producer.Partitioner接口)。key相同的消息会被发送并存储到同一个partition里
4.每一条消息被发送到broker时,会根据分区的规则选择被存储到哪一个partition在创建topic时可以在config/server.properties中指定这个partition的数量
offset
1.消费者所持有的仅有的元数据就是这个偏移量,也就是消费者在这个log中的位置。 这个偏移量由消费者控制。
2.当消费者消费消息的时候,偏移量会线性的增加。实际偏移量由消费者控制,消费者可以将偏移量重置为之前的一个偏移量,重新读取消息。
具体使用:
开启kafka前先要开启zookeeper
1.bin/zkServer.sh start
2.开启kafka server
bin/kafka-server-start config/server.properties
3.测试时可以先开kafka的producer
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test(--broker-list是kafka所在主机)
再开启kafka的consumer
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
接着就可以在producer中发送消息
Kafka配置文件:
几个关键配置:
broker.id=0
listeners=PLAINTEXT://172.16.49.173:9092
port=9092
log.dirs=kafka-logs
zookeeper.connect=localhost:2181
listeners一定要配置成为IP地址;如果配置为localhost或服务器的hostname,在使用java发送数据时可能会抛出异常:org.apache.kafka.common.errors.TimeoutException: Batch Expired 。因为在没有配置advertised.host.name 的情况下,Kafka并没有广播我们配置的host.name,而是广播了主机配置的hostname。远端的客户端并没有配置 hosts,所以自然是连接不上这个hostname的,也可以在远端客户端配置hosts
Zookeeper.connect中zk集群地址以“,”分隔
集群的配置
与单机的配置差不多,只是listeners的配置需要改为集群服务的IP地址和采用的端口。
关于kafka的监控:
可以使用kafkaOffSetMonitor
(https://github.com/quantifind/KafkaOffsetMonitor/releases/download/v0.2.1/KafkaOffsetMonitor-assembly-0.2.1.jar)
将KafkaOffsetMonitor-assembly-0.2.0.jar上传到服务器后,可以新建一个脚本用于启动该应用。脚本内容如下:
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar
com.quantifind.kafka.offsetapp.OffsetGetterWeb
--zk zk1:2181,zk2:2181,zk3:2181
--port 8088
--refresh 10.seconds
--retain 2.days
zk集群
Consumer消费情况
(左上角显示的是topic生产速率,右上角是consumer消费速率,蓝色的表示当前Topic中的Message数目,灰色的表示当前Consumer消费的offset位置,红色的表示蓝色灰色的差值,即当前Consumer滞后于Producer的message数目)
这里有一个坑,默认情况下Producer往一个不存在的Topic发送message时会自动创建这个Topic。由于在这个封装中,有同时传递message和topic的情况,如果调用方法时传入的参数反了,将会在Kafka集群中自动创建Topic。在正常情况下,应该是先把Topic根据需要创建好,然后Producer往该Topic发送Message,最好把Kafka这个默认自动创建Topic的功能关掉。
如果真的不小心创建了多余的Topic,在删除时,会出现“marked for deletion”提示,只是将该topic标记为删除,使用list命令仍然能看到。如果需要调整这两个功能的话,在server.properties中配置如下两个参数:
auto.create.topics.enable 默认值true
delete.topic.enable 默认值false
- 关于使用kafka的个人总结
- 关于使用kafka的个人总结
- Kafka 个人总结
- 个人Kafka使用
- 关于NRF24L01模块使用的部分个人总结
- 关于Jenkins使用的个人几点总结
- kafka个人总结(1)
- Kafka理论总结(个人)
- 关于INSTALL_FAILED_NO_MATCHING_ABIS.的个人总结
- Kafka的安装和使用总结
- 个人总结ASI的使用
- AsyncTask的个人使用总结
- CocoaPods 的个人使用总结
- PCA9555的使用个人总结
- kafka-使用总结
- 关于sql的一些个人总结
- 关于集合类的个人总结
- 关于虚函数表的个人总结
- Java冒泡、选择排序以及二分法
- org.apache.ibatis.builder.BuilderException解决
- react的学习笔记1
- 阿里、腾讯内部10G大神PPT,10分钟从PPT菜鸟到大神百度网盘下载
- startService与bindService混合使用对Service生命周期的影响
- 关于使用kafka的个人总结
- 人生如此的艰难算什么?!!为了活着而活着,这就是传奇!
- 树、森林与二叉树的转换
- [从头学数学] 第272节 [计算几何] 从线段集连通区域
- JAVA设计模式
- 八,Java集合类(6)——Map接口及其实现类
- 线程的分离状态 pthread
- LiulishuoPreview 手摸手带你用 VideoView 实现英语流利说炫酷引导页
- android ListView下拉刷新