Kafka high level API8 Consumer

  
  
   
   
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
 
import org.apache.log4j.Logger;
import com.jd.Seckill.UdpRecv.Utils.Config;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;
import kafka.consumer.Consumer;
 
public class KafkaConsume_HighAPI8
{
private static Logger log = Logger.getLogger(KafkaConsume_HighAPI8.class);
private final ConsumerConnector consumer;
private final String topic;
private ExecutorService executor;
 
private static ConsumerConfig createConsumerConfig(String a_zookeeper, String a_groupId)
{
Properties props = new Properties();
props.put("zookeeper.connect", a_zookeeper);
props.put("group.id", a_groupId);
props.put("zookeeper.session.timeout.ms", "400");
props.put("zookeeper.sync.time.ms", "200");
props.put("auto.commit.interval.ms", "1000");
 
return new ConsumerConfig(props);
}
 
public KafkaConsume_HighAPI8(String a_zookeeper, String a_groupId, String a_topic)
{
consumer = Consumer.createJavaConsumerConnector(createConsumerConfig(a_zookeeper, a_groupId));
this.topic = a_topic;
}
 
public void shutdown()
{
if (consumer != null)
consumer.shutdown();
if (executor != null)
executor.shutdown();
try
{
if (!executor.awaitTermination(5000, TimeUnit.MILLISECONDS))
{
System.out.println("Timed out waiting for consumer threads to shut down, exiting uncleanly");
}
}
catch (InterruptedException e)
{
System.out.println("Interrupted during shutdown, exiting uncleanly");
}
}
 
public void run(int a_numThreads)
{
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(topic, new Integer(a_numThreads));
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic);
 
executor = Executors.newFixedThreadPool(a_numThreads);
 
int threadNumber = 0;
for (final KafkaStream stream : streams)
{
executor.submit(new ConsumerTest(stream, threadNumber));
threadNumber++;
}
}
 
public void mainHandle()
{
String zooKeeper = Config.getM_strZkServers();
String groupId = "a";
String topic = Config.getM_strConsume8Topic();
int threads = 2;
 
KafkaConsume_HighAPI8 example = new KafkaConsume_HighAPI8(zooKeeper, groupId, topic);
example.run(threads);
 
try
{
Thread.sleep(10000);
}
catch (InterruptedException e)
{
log.error(e);
}
example.shutdown();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink是一个开源的流处理框架,而Kafka是一个分布式消息队列系统。在Flink中使用Kafka的Java API可以实现将Kafka中的数据作为输入源或将处理结果输出到Kafka中。 在Flink中使用Kafka Java API的步骤通常如下: 1. 引入Kafka的依赖:首先需要将Kafka的Java API的依赖添加到Flink的工程中。 2. 创建Kafka消费者:使用Kafka的Java API创建一个消费者实例,可以指定消费者的一些配置如Kafka的地址、消费者组ID等。通过调用消费者的`assign()`方法或`subscribe()`方法来指定要消费的Kafka主题。 3. 创建Flink的DataStream:使用Flink的DataStream API实例化一个用于接收Kafka数据的DataStream对象。可以使用`addSource()`方法来将Kafka消费者作为数据源。可以在创建DataStream时指定Kafka消息的反序列化方式、数据类型等。 4. 执行数据处理逻辑:可以在DataStream上应用各种Flink的算子,如map、filter、reduce等,对Kafka中的数据进行处理。 5. 创建Kafka生产者:使用Kafka的Java API创建一个生产者实例,可以指定生产者的一些配置。通过调用生产者的`send()`方法将处理后的结果数据发送到Kafka中。 6. 提交任务并启动Flink作业:将处理逻辑应用到Flink的任务上,并将任务提交给Flink集群进行执行。 通过以上步骤,就可以在Flink中使用Kafka的Java API进行数据的输入和输出。这种方式将Kafka作为Flink的一个数据源或数据目的,使得数据可以在流处理中被实时地处理和分析。同时,由于Kafka的分布式特性,也可以保证数据的可靠性和高吞吐量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值