Kafka Spout Offset存储在Zookeeper

本文介绍了一个使用KafkaSpout从Kafka读取数据并将其配置到Zookeeper的具体实例。为了确保KafkaSpout能正确地将偏移量存储在Zookeeper中,必须明确设置SpoutConfig.zkPort和SpoutConfig.zkServers参数。

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

Kafka Spout Offset存储在Zookeeper,配置中需要单独指定SpoutConfig.zkPort和SpoutConfig.zkServers,否则无法生效。

import java.util.ArrayList;
import java.util.List;

import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.kafka.BrokerHosts;
import org.apache.storm.kafka.KafkaSpout;
import org.apache.storm.kafka.SpoutConfig;
import org.apache.storm.kafka.StringScheme;
import org.apache.storm.kafka.ZkHosts;
import org.apache.storm.spout.SchemeAsMultiScheme;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Tuple;

/**
 * ClassName:CKafkaSource <br/>
 * Function: TODO ADD FUNCTION. <br/>
 * Reason: TODO ADD REASON. <br/>
 * Date: 2017年8月10日 下午4:51:24 <br/>
 */
public class CKafkaSource {

	@SuppressWarnings({ "serial" })
	public static void main(String[] args) throws Exception {
		TopologyBuilder builder = new TopologyBuilder();

		//offset config start
		BrokerHosts hosts = new ZkHosts("breath:2181");
		String topicName = "test";
		SpoutConfig spoutConfig = new SpoutConfig(hosts, "test", "/consumers/" + topicName,
				"CKafkaSource".toLowerCase());
		spoutConfig.zkPort = 2181;
		List<String> servers = new ArrayList<>();
		servers.add("breath");
		spoutConfig.zkServers = servers;
		//offset config start
		
		spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
		KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);

		builder.setSpout("spout", kafkaSpout);

		builder.setBolt("bolt", new BaseBasicBolt() {
			[@Override](https://my.oschina.net/u/1162528)
			public void execute(Tuple input, BasicOutputCollector collector) {
				System.err.println(input.getString(0));
			}

			[@Override](https://my.oschina.net/u/1162528)
			public void declareOutputFields(OutputFieldsDeclarer declarer) {
			}
		}).shuffleGrouping("spout");

		Config conf = new Config();
		conf.setDebug(false);
		if (args != null && args.length > 0) {
			conf.setNumWorkers(3);
			StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
		} else {
			conf.setMaxTaskParallelism(1);
			LocalCluster cluster = new LocalCluster();
			cluster.submitTopology("wordcount", conf, builder.createTopology());
			Thread.sleep(20000);
			cluster.shutdown();
		}
	}
}

转载于:https://my.oschina.net/yulongblog/blog/1506165

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值