본관은 안동(安東). 자는 보숙(輔叔), 호는 유와(牖窩). 할아버지는 김우겸(金祐謙)이고, 아버지는 김유행(金由行)이며, 어머니는 이덕영(李德英)의 딸이다.
1785년(정조 9) 진사로서 알성 문과에 갑과로 급제, 정언(正言)이 되었다.
이듬해 부교리(副校理)가 되어 1787년 함경도 경원에 익조(翼祖)와 도조(度祖)를 기리는 비를 세울 것을 건의하여 받아들여졌다. 다음 해 교리가 되어 영의정 김치인(金致仁)을 탄핵하다가 이성(利城)에 유배되었다. 유배에서 풀려난 뒤, 1790년 장령(掌令)과 동부승지, 이듬해 대사성과 대사간 등을 거쳐 1793년에는 안동부사가 되었다.
안동부사 재직시 형벌이 과다하여 안동사람들의 소청에 따라 유배되었다. 이듬해 이조참의와 대사간을 지내고 1795년 강화유수를 역임하였다. 1797년 강원도관찰사를 거쳐, 1799년 진위 겸 진향부사(陳慰兼進香副使)로 청나라에 다녀왔다. 1800년 순조가 즉위한 뒤 벽파(僻派)가 득세하자 시파(時派)로 지목되어 진도로 유배되었다.
그 뒤 안동김씨가 집권하자 방환되어 1807년(순조 7) 공조판서와 병조판서를 지냈다. 이어서 수원부유수·대사헌·형조판서·한성부판윤 등을 역임하였다. 1812년 대호군으로 재직시 세도(世道)를 주장하였는데, 이에 대한 비난이 쏟아지자 스스로 치사(致仕: 벼슬길에서 은퇴함)하고 봉조하(奉朝賀)를 받았다.