kafka消费者简单样例

本文介绍了如何在Kafka消费者应用中实现多线程和非同步提交。通过创建内部类并继承Thread,实现了每个线程对应一个KafkaConsumer对象,监听特定分区。强调了Kafka的分区消费规则,以及非同步提交的关键步骤,包括禁用自动提交、手动移动偏移量和提交。
摘要由CSDN通过智能技术生成

前言

这段时间在做一个内部sql转换中间件项目.涉及到从kafka取消息.网上的简单样例大多是单线程的自动获取提交样例.在这里我需要手动提交消息.

maven

		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka_2.11</artifactId>
			<version>0.11.0.0</version>
		</dependency>

单线程

@Component("kafkaUtils")
public class KafkaUtils {

	private static final Logger LOGGER = LoggerFactory.getLogger(KafkaUtils.class);
	
	private KafkaConsumer<String, String> consumer;//消费者
	@Value("${kafka.consumer.servers}")
	private String server;
	@Value("${kafka.consumer.group.id}")
	private String groupId;
	@Value("${kafka.consumer.topic}")
	private String topic;
	
	public static long receiveMsgMill = 0L;//从kafka获取消息的最新时间戳

	@PostConstruct
	public void init() {

		Properties props = new Properties();
		props.put("bootstrap.servers", server);// 服务器ip:端口号,集群用逗号分隔
		props.put("group.id", groupId);
		props.put("enable.auto.commit", "false");
		//props.put("auto.commit.interval.ms", "5000");
		props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		props.put("auto.offset.reset", "earliest");

		Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
		
		consumer = new KafkaConsumer<String, String>(props);
		consumer.subscribe((Arrays.asList(topic)));
	}


	public KafkaConsumer<String, String> getKafkaConsumer() {
		return consumer;
	}

	@PreDestroy
	public void closeKafkaConsumer() {
		consumer.close();
	}

	/**
	 * 从kafka上接收对象消息,将json字符串转化为对象,便于获取消息的时候可以使用get方法获取。
	 * 
	 * @param count
	 *            获取的消息个数
	 * @return 获取的消息队列
	 */
	public List<JSONObject> getMsgFromKafka(int count) {
		List<JSONObject> list = new LinkedList<>();
		try {

			boolean getDataFlag = f
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值