初识kafka

个人笔记。

Kafka只提供了topic,如果想实现queue的模式,那么需要通过consumergroup的方式。如果所有的consumer都在一个group,那么这个topic的消息只会被这个group里面的一个consumer消费。


如果想实现发布-订阅的模式,则每个consumer设置不同的group即可。

 

消息的分区有序

每个消费者对应一个分区,则每个分区的消费只有一个消费者消费,则可以保证有序,同时又有多个分区,还可以达到负载均衡的目的。

分区数等于消费者数量


分区数小于消费者数,会导致消费者被闲置。


分区数大于消费者数



kafka说明
整合spring一起使用时,配置的并发数即对应的consumer, 即消费线程,不是部署的机器
spring:
  kafka:
    listener:
        concurrency: 10



Kafka持续收集日志(当然也可以使用flume,它支持的source很多)

tail -F /tmp/test.txt |./kafka-console-producer.sh --broker-list localhost:9092 --topic connect-test

用tail –F,这样当log新建的时候依然可用,然后加上pipeline,发送到指定的topic

简单整合kafka和storm

<storm.version>1.0.1</storm.version>
<kafka.version>0.10.0.0</kafka.version>
<dependency>
			<groupId>org.apache.storm</groupId>
			<artifactId>storm-core</artifactId>
			<version>${storm.version}</version>
			<!-- <scope>provided</scope> -->
		</dependency>
		<dependency>
			<groupId>org.apache.storm</groupId>
			<artifactId>storm-kafka</artifactId>
			<version>${storm.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka-clients</artifactId>
			<version>${kafka.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka_2.11</artifactId>
			<version>${kafka.version}</version>
		</dependency>

Topology

TopologyBuilder builder = new TopologyBuilder();
ZkHosts hosts = new ZkHosts("127.0.0.1:2181");
SpoutConfig sc = new SpoutConfig(hosts, "connect-test", "/kafkaSpoutOffset", "StormStarter-1");
sc.scheme = new StringMultiSchemeWithTopic();
sc.zkServers = Arrays.asList("127.0.0.1");
sc.zkPort = 2181;
//最开始并没有设置上面的2个属性,导致每次重启,kafkaSpout都会从最开始来消费消息,原来需要配置额外再陪一下zk来存储offset, 而SpoutConfig的第三个参数也是对应的offset的path,之前一直以为的kafka broker的zk path来着。记录一下。

builder.setSpout("logSender", new KafkaSpout(sc), 1);
builder.setBolt("logSpliter", new SeperateLogBolt(), 1).shuffleGrouping("logSender");
//SeperateLogBolt对log过滤,拿到log的message。
builder.setBolt("logAnasysis", new AnalyseLogBolt(), 1).shuffleGrouping("logSpliter");
//AnalyseLogBolt就是对最终的log message进行分析并将结果写入存储。
Config conf = new Config();
conf.setDebug(true);

if (args != null && args.length > 0) {
	conf.setNumWorkers(3);
	StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
} else {
	conf.setMaxTaskParallelism(3);
	LocalCluster cluster = new LocalCluster();
	cluster.submitTopology("string-demo", conf, builder.createTopology());
	TimeUnit.MINUTES.sleep(30L);
	cluster.shutdown();
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值