kafka开发小结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/change_on/article/details/87451323

最近两个月,项目开发用到kafka,今天终于跑通了线上环境,这期间也踩了不少坑,在这里做一个总结。

大致需求:做一个图像处理工具,每天处理10w的图片,由于机房分布在不同地方,这里有两套kafka集群环境,业务系统也有好几个

开发思路:1.先准备内网环境
2.创建单机kafka
3.开发业务系统
4.跑通业务流程
5.配置两套kafka、和集群kafka
6.每个子系统配置双机,模拟集群
7.迁移到线上环境

大体是这样,我就说些kafka的注意事项

1.分区是消费者的整数倍,我是用2倍

kafka 启动和关闭的命令:

bin/kafka-server-start.sh config/server.properties
bin/kafka-server-stop.sh config/server.properties

2.主题的命名要规范,topic_作用_接受者_发送者

创建的命令是:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2--topic topic_info_receiver_sender

3.服务器查看kafka消费状态

kafka-consumer-groups.sh --zookeeper xxx.xxx.xxx.xxx:2181 --group groupid--describe
GROUP                          TOPIC                          PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             OWNER
xxx                           xxx                            xxx            xxx          xxx             xxx

LAG 表示生产消息,但是还未被消费
LOG-END-OFFSET 表示该队列已经被消费的消息总数

4.主题删除

先用命令:

bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic xxx

若该命令无效,则进入zookeeper/bin

./zkCli.sh
ls /brokers/topics 查看所有的topic
rmr /brokers/topics/xxx 删除

5.集群配置

把zookeeper、kafka 复制到新机器上,改两个文件就行,这个网上有很多,不在重复

6.代码层面

因为不止一个业务系统,把kafka的操作,produce和comsumer封装在两个项目里面,通过注解配置,其他项目通过maven引入

<dependency>
			<groupId>com.xxx.kafka</groupId>
			<artifactId>kafka-producer</artifactId>
			<version>0.0.1</version>
		</dependency>
		
		<dependency>
			<groupId>com.xxx.kafka</groupId>
			<artifactId>kafka-consumer</artifactId>
			<version>0.0.1</version>
		</dependency>

7.如果一个子系统需要连接两套kafka集群,也就是有两个生产者,要注意缓存,最好在发送之前更新下代码的brokerList

<bean id="southKafkaProducer" class="com.xxx.kafka.producer.KafkaProducer"  init-method="init"  lazy-init="true">
	    <property name="brokerlist" value="${metadata.broker.list}"></property>
	    <property name="partion" value="${partion}"></property>
	    <property name="bufferingMaxMs" value="${bufferingMaxMs}"></property>
	    <property name="bufferingmaxmessages" value="${bufferingmaxmessages}"></property>
	  </bean> 
	  
	  <bean id="northKafkaProducer" class="com.xxx.kafka.producer.KafkaProducer"  init-method="init"  lazy-init="true">
	    <property name="brokerlist" value="${metadata.broker.list2}"></property>
	    <property name="partion" value="${partion}"></property>
	    <property name="bufferingMaxMs" value="${bufferingMaxMs}"></property>
	    <property name="bufferingmaxmessages" value="${bufferingmaxmessages}"></property>
	  </bean>

8.关于调优

  • 内存方面,多多益善,比如机器有8G,kafka给7.9G
  • 日志定时清理,用脚本
  • 防止某个主题的消息堆积,可以加队列,个数限制,超过总数不发送到kafka队列,具体的在上两篇博文中有介绍
  • 消息大小限制,由于业务需要,照顾不了吞吐量,也是往大了设置,保证稳定性
props.put("fetch.message.max.bytes", "2000000000");
props.put("fetch.message.max.bytes", "2048576000");
  • 没什么事不要操作kafka!没什么事不要操作kafka!没什么事不要操作kafka!

猜你喜欢

转载自blog.csdn.net/change_on/article/details/87451323
今日推荐