public void addGroupOnlineInfo(boolean isOnLine, boolean isFilterCsm, String clientId,
            Long hbTime, String topicName, int partitionId) {
        this.isOnLine = isOnLine;
        this.isFilterCsm = isFilterCsm;
        Tuple2<Integer, Long> clientInfo = clientMap.get(clientId);
        if (clientInfo == null) {
            clientMap.put(clientId, new Tuple2<>(clientMap.size(), hbTime));
            clientInfo = clientMap.get(clientId);
        }
        final int storeId = partitionId < TBaseConstants.META_STORE_INS_BASE
                ? 0
                : partitionId / TBaseConstants.META_STORE_INS_BASE;
        Map<Integer, OffsetCsmRecord> storeOffsetMap = histOffsetMap.get(topicName);
        if (storeOffsetMap == null) {
            Map<Integer, OffsetCsmRecord> tmpMap = new HashMap<>();
            storeOffsetMap = histOffsetMap.putIfAbsent(topicName, tmpMap);
            if (storeOffsetMap == null) {
                storeOffsetMap = tmpMap;
            }
        }
        OffsetCsmRecord offsetCsmRecord = storeOffsetMap.get(storeId);
        if (offsetCsmRecord == null) {
            OffsetCsmRecord tmpRecord = new OffsetCsmRecord(storeId);
            offsetCsmRecord = storeOffsetMap.putIfAbsent(storeId, tmpRecord);
            if (offsetCsmRecord == null) {
                offsetCsmRecord = tmpRecord;
            }
        }
        offsetCsmRecord.addClientRecId(partitionId, clientInfo.getF0());
    }
Add group online info

@param isOnLine      whether online
@param isFilterCsm   whether filter consume
@param clientId      client id
@param hbTime        last hb time
@param topicName     topic name
@param partitionId   partitionId
inlong-tubemq/tubemq-server/src/main/java/org/apache/inlong/tubemq/server/broker/offset/OffsetHistoryInfo.java