github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/kafka/util.go (about)

     1  package kafka
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strings"
     7  
     8  	"github.com/IBM/sarama"
     9  )
    10  
    11  func ParseVersion(config *sarama.Config, version string) error {
    12  	if version == "" {
    13  		return nil
    14  	}
    15  
    16  	v, err := sarama.ParseKafkaVersion(version)
    17  	if err != nil {
    18  		return fmt.Errorf("parsing KafkaDestination version error: %w", err)
    19  	}
    20  
    21  	config.Version = v
    22  	return nil
    23  }
    24  
    25  func ParseCodec(codec string) sarama.CompressionCodec {
    26  	switch l := strings.ToLower(strings.TrimSpace(codec)); l {
    27  	case "none":
    28  		return sarama.CompressionNone
    29  	case "gzip":
    30  		return sarama.CompressionGZIP
    31  	case "snappy":
    32  		return sarama.CompressionSnappy
    33  	case "lz4":
    34  		return sarama.CompressionLZ4
    35  	case "zstd":
    36  		return sarama.CompressionZSTD
    37  	default:
    38  		log.Printf("W! unknown compression codec %s", codec)
    39  		return sarama.CompressionNone
    40  	}
    41  }
    42  
    43  func ParseBalanceStrategy(assignor string) sarama.BalanceStrategy {
    44  	switch assignor {
    45  	case "sticky":
    46  		return sarama.BalanceStrategySticky
    47  	case "roundrobin", "rr":
    48  		return sarama.BalanceStrategyRoundRobin
    49  	case "range":
    50  		return sarama.BalanceStrategyRange
    51  	default:
    52  		return sarama.BalanceStrategyRange
    53  	}
    54  }
    55  
    56  func ParseRequiredAcks(acks string) sarama.RequiredAcks {
    57  	acks = strings.ToLower(acks)
    58  	switch acks {
    59  	case "waitforlocal":
    60  		return sarama.WaitForLocal
    61  	case "noresponse":
    62  		return sarama.NoResponse
    63  	case "waitforall":
    64  		return sarama.WaitForAll
    65  	default:
    66  		return sarama.WaitForLocal
    67  	}
    68  }
    69  
    70  func SASLVersion(kafkaVersion sarama.KafkaVersion, saslVersion *int) (int16, error) {
    71  	if saslVersion == nil {
    72  		if kafkaVersion.IsAtLeast(sarama.V1_0_0_0) {
    73  			return sarama.SASLHandshakeV1, nil
    74  		}
    75  		return sarama.SASLHandshakeV0, nil
    76  	}
    77  
    78  	switch *saslVersion {
    79  	case 0:
    80  		return sarama.SASLHandshakeV0, nil
    81  	case 1:
    82  		return sarama.SASLHandshakeV1, nil
    83  	default:
    84  		return 0, fmt.Errorf("invalid SASL version")
    85  	}
    86  }